POWERSHELL 3.0 新機能 - Download Center - Microsoft

Windows Server 2012 管理のための
Windows PowerShell 3.0
新機能解説
Microsoft MVP for PowerShell
牟田口大介
自己紹介 牟田口大介
•ライターやってます
• 2008 Windows PowerShell ポケットリファレンス(技術評論社)
• 2009 PowerShellによるWindowsサーバ管理術(ソフトバンククリエイ
ティブ、共著)
• 2010~ PowerShell的システム管理入門(@IT)
•Microsoft MVP for PowerShell
• July 2004 ~ June 2013
•わんくま同盟 大阪勉強会でスタッフ&スピーカー
•http://winscript.jp/
•http://twitter.com/mutaguchi
アジェンダ
• PowerShellとは
• PowerShell 3.0 新機能
• PowerShell 3.0 改善点
• まとめ
part.1
POWERSHELL とは
4
PowerShell 登場以前 従来環境の問題点
コマンドプロンプト
スクリプト(バッチファイル)の構文が貧弱
コマンドが多すぎて把握しづらい
コマンドの使い方もバラバラ
WSH (VBScript or JScript)
冗長な記述を強いられるスクリプト
インタラクティブシェルの機能がない
すべての問題を解決する PowerShell の登場
PowerShell とは
• Microsoft が作ったシステム管理用の新しいシェル
• Windows Server 2008 R2 / Windows 7 から OS の標準機
能に (PowerShell 2.0)
• Windows Server 2012 / Windows 8ではさらに高機能化
(PowerShell 3.0)
• 「コマンドレット」を組み合わせて使用
• .NET Framework を用いたオブジェクトベースのシェル
• 強力なスクリプト言語
– 開発環境 (PowerShell ISE) が標準搭載
コマンドレットの特長 ~ 統一された小さなコマンド群
• 命名規則が統一されている
Get-Process -Name PowerShell
動詞-名詞 -パラメータ名 パラメータ値
• すべてのコマンドの基本的な使い方が同じ
• コマンドを探しやすい・他の類似コマンド名が類推できる
Process を扱うコマンドレットを探す:
Get-Command -Noun Process
• 入力の省力化
コマンドレットやパラメータにタブ補完、エイリアス機能
• パイプラインで組み合わせて複雑な処理が可能
パイプラインを渡るデータはテキストではなくオブジェクト
part.2
POWERSHELL 3.0 新機能
8
PowerShell 3.0 のインストール
• Windows Server 2012 RC / Windows 8 RPの場合、追加
インストール不要(WMF3.0 RC相当)
• Windows Server 2008 SP2 / 2008 R2 SP1/ Windows 7
SP1
• .NET4をインストール
• Download: WMF 3.0 RC - Microsoft Download Center - Download
Details
http://www.microsoft.com/en-us/download/details.aspx?id=29939
からWindows Management Framework 3.0 RCをDLしインストール
PowerShell 3.0 エンジン
• PowerShell 3.0は対応する.NET(CLR)のバージョンが2.0か
ら4.0になった
• PowerShell 3.0は2.0に対し後方互換性あり
• 3.0と2.0のエンジンは共存可能
• サイドバイサイド実行可
• powershell.exe -version 2
• 3.0のセッションから2.0のセッションを実行なども可能
スクリプト高速化
• パーサーの改善
• 初回…式木にコンパイル→インタプリタ実行
• よく使う処理/ループ…バックグラウンドでJITによりコンパイル
• DLR化
• PSObjectはPowerShell独自の型拡張システムのラッパーオブジェクトで
はなくDLRのdynamic objectそのものになった
– 他言語からPSObject をdynamicキーワードで扱える
• IronPythonなどと同様の機能を持つが、HostingなどDLRのすべての機能
を満たしているわけではない
http://huddledmasses.org/powershell-3-finally-on-the-dlr/
• スクリプトの実行速度6倍に
ワークフロー(1)
• PS Workflow
• 以下の目的に特化した関数の一種
– 長時間を要するタスク
– リモート実行
– 並列実行
• Workflowジョブの中断と再開が可能
– 切断したセッションへの再接続も可能(WinRM3.0による堅牢なセッション)
• 専用構文workflow
• 実行時はWF (Windows Workflow Foundation) のxamlに変換される
ワークフロー(2)
• Windows Workflow Foundation (WF)と連携
• PSコマンドレットをWFのアクティビティとして利用可
– Microsoft.PowerShell.*.Activities名前空間
• WFのワークフローをPowerShellから実行可
– Import-Module hoge.xaml
– WFのデザイナで書いたワークフローをPowerShell スクリプトとして実行
PS Workflow 文法
• functionの代わりにworkflowで定義
• parellelブロック
• ブロック内の文を並列して実行
– その中で逐次処理したい部分はsequenceブロックに記述
• foreach -parallelステートメント
• 配列要素を並列して処理
• inlinescriptアクティビティ
• 通常のPowerShellスクリプトを記述
• 自動的に定義される共通パラメータ
• -PSRunningTimeoutSec, -PSSessionOption, -AsJobなど
• 通常のスクリプトに比べさまざまな制限あり
• breakが使えないとかパラメータ名省略できないとか…
追加コマンドレット
• v1: 129→v2: 236→v3: 261 (25個増加)
• ジョブ/PSリモーティング/ワークフロー関係
•
•
•
•
Suspend-Job Resume-Job Register-JobEvent
Connect-PSSession Disconnect-PSSession Receive-PSSession
New-PSSessionConfigurationFile Test-PSSessionConfigurationFile
Disable-PSRemoting New-PSTransportOption
• Web関係
• ConvertFrom-Json ConvertTo-Json
• Invoke-RestMethod Invoke-WebRequest
• その他
•
•
•
•
•
Show-Command
Save-Help Update-Help
Get-ControlPanelItem Show-ControlPanelItem
Get-TypeData Remove-TypeData
New-WinEvent Rename-Computer Unblock-File Export-CimCommand
モジュール(PS3.0付属)
• PowerShell 2.0 (25コマンドレット)
•
•
•
•
PSDiagnostics (10)
BitTransfer (8)
AppLocker (5)
TroubleShootingPack (2)
• PowerShell 3.0で追加 (29コマンドレット)
• PSScheduledJob (16)
• CimCmdlets (12)
• PSWorkflow (1)
• 計7モジュール、54コマンドレット
モジュール(Windows 8付属)
Storage (64)
Appx (5)
BranchCache (31)
BitLocker (49)
DnsClient (15)
DnsNrpt (7)
MsDtc (41)
NetworkTransition (37)
NetLbfo (13)
NetSwitchTeam (7)
Wdac (12)
PrintManagement (18)
Dism (1)
SmbShare (23)
DnsConfig (7)
iSCSI (14)
DirectAccessClientComponent
PS_MMAgent (3)
s (11)
NetAdapter (64)
ScheduledTasks (33)
NetworkConnectivityStatus (4) NetTCPIP (34)
NetQos (4)
SmbWitness (4)
PKIClient (17)
KdsCmdlets (6)
TrustedPlatformModule (9)
SecureBoot (8)
NetworkSecurity (4)
DnsLookup (1)
• 計30モジュール、546コマンドレット
新モジュール(Server 2012 付属)

「役割」「機能」にそれぞれ対応するモジュールが存在
ADDeploymentWF (1)
BestPractices (4)
ClusterAwareUpdating (8)
FileServer (41)
Hyper-V (148)
MicrosoftiSCSITarget (22)
netwnv (13)
RDManagement (103)
ServerManager (2)
ServerManagerShell (27)
TelemetryManagement (2)
UserAccessLogging (14)
Whea (2)
DnsServer (97)
ADDSDeployment (73)
UpdateServices (13)
ActiveDirectory (134)
FailoverClusters (78)
WindowsServerBackup
(35)
WebAdministration (71)
GroupPolicy (26)
MSMQ (22)

※ここに挙げたのはすべてではない
モジュール、コマンドレット数まとめ
環境
PSコア
PS付属
Win8
Server2012
合計
Win7/PS2
7 (236)
4 (25)
-
-
11 (261)
Win7/PS3
7 (261)
7 (54)
-
-
14 (315)
Win8/PS3
7 (261)
7 (54)
30 (546)
-
44 (861)
Server2012/PS3
7 (261)
7 (54)
30 (546)
22+ (2300+)
66+ (2300+)
Cmdlet Auto Discovery
コマンド入力
ロード済モジュールに
存在?
NO
YES
コマンド実行
(従来はここでエラー終了)
モジュールフォルダから
コマンドレット探索
コマンドレット
発見?
NO
エラー終了
YES
該当モジュールロード
コマンド実行
exeコマンド→コマンドレット移行例
• ipconfig.exe→
Get-NetIPAddress (NetTCPIPモジュール)
• nslookup.exe→
Resolve-DnsName (DNSClientモジュール)
• netsh.exeを実行するとサブコマンドによっては「
PowerShellを使ってね」的な表示がされる。
• dcpromo.exeを実行すると「サーバーマネージャでやってね
」的な表示がされる。昇格はActiveDirectoryモジュールを使
ったスクリプトが動作。
Active Directory 管理センター
22
PowerShellベースのサーバーアプリ
Script
SCVVM
PowerShell Console
PowerShell ISE
IT Pros
Remote or Local
PowerShell Modules
GUI
Front-End
GUI
GUI Front-End
Front-Ends
Cmdlets PS Providers Cmdlets PS Providers
Cmdlets PS Providers
Remote or Local
Server App
Resources
Server App
Resources
Server App
Resources
Developers
Windows Management Framework 3.0における
CIM管理
Windows Clients
Windows Servers
Non-Windows Servers
Windows PowerShell
WMI Providers MI Providers
WMI
Cmdlets
DCOM
CIM
Cmdlets
CIM-Based
Cmdlets
WS-Man (WinRM)
WMI Engine
DCOM
WS-Man
MI Providers
CIMOM
NanoWBEM
WS-Man
WS-Man
PowerShell Web Service
• Restful インターフェースで PowerShell コマンドレットを
実行
• クライアントは http が使えるものなら何でも可
• OData を扱うさまざまなライブラリが利用可
PowerShell Webアクセス
• WebブラウザでPowerShellコンソールにアクセス可能
• PowerShellがない環境でもブラウザがあれば管理できる!
• 利用手順
• サーバーマネージャーでIISとWindows PowerShell Web Accessを有効
にする
• IISのDefault Web SiteにSSLをバインド
• Install-PswaWebApplicationを実行
• Add-PswaAuthorizationRule * * *を実行
• https://サーバー名/pswaにアクセス
• 詳しくは
C:¥Windows¥Web¥PowerShellWebAccess¥wwwroot¥README.txt
PowerShell Webアクセス
PowerShell Webアクセス
part.3
POWERSHELL 3.0 の改善点
30
PowerShell ISEの強化
• 従来の3ペイン構成から「スクリプト」「コンソール」の2ペ
イン構成に
• インテリセンス
• コマンドレット
• パラメータ
• 変数のメンバ
• 文法エラーに波線
• ブロック折り畳み
• アドオン
• コードスニペット
文法の改善点 1
• 連想配列→オブジェクト キャスト
• 旧)$o=new-object psobject -property @{
Name="mutaguchi"; Age=18}
• 新)$o=[pscustomobject]@{Name="mutaguchi";Age=18}
• OrderedDictionary
• [ordered]@{a=1; b=2}
• 変数への属性付与
• [ValidateRange(1,10)][int]$x = 1
• ネイティブコマンドのためのエスケープ記法 --%
• cmd --% /c echo $home
文法の改善点 2
• ジェネリックメソッド実行
• $array.Prop が $array | foreach {$_.Prop} と等価に
• $using:ラベル
• 別セッションにカレントセッションの変数を渡せる
• 新演算子
• ビットシフト:-shl -shr
• 要素の存在:-in -notin
– -containsの右辺左辺が逆になったもの
文法の改善点 3
• foreach($a in $null){"hello"}バグ修正
• .演算子で改行許可
• $a=" a b c d "
$a.
Trim().
ToUpper().
Split(" ")
• 出力リダイレクト先の追加
リダイレクト
意味
リダイレクト
意味
1
パイプライン
(標準出力に相当)
2
エラー
3
警告
4
詳細
5
デバッグ
*
すべて
Where-ObjectとForEach-Objectの簡易表記
• Where-Object
• 旧)gci | ? {$_.Extension -eq ".txt"}
• 新)gci | ? Extension -eq .txt
– Where-Object [-Property] <string> [[-Value] <Object>] [-InputObject
<psobject>] -EQ
のようなパラメータセットが全演算子分定義
• ForEach-Object
• 旧)gps -name notepad | % {$_.WaitForExit(5000)}
• 新)gps -name notepad | % WaitForExit 5000
– ForEach-Object [-MemberName] <string> [-InputObject <psobject>]
[-ArgumentList <Object[]>]
Get-ChildItemの属性フィルタ
• ディレクトリのみ
• 旧)gci|?{$_.PSIsContainer}
• 新)gci -directory
• 読み取り専用のみ
• 旧)gci|?{$_.Attributes -band [IO.FileAttributes]::ReadOnly}
• 新)gci -readOnly
• 複数属性のAND指定
• gci -system -archive
• 複数属性のOR指定
• gci -attributes a,h,r
• -attributesパラメータでの演算
• gci -attributes h+!r
FileSystemプロバイダの改善点
• UNCパスの表示
• 旧)PS Microsoft.PowerShell.Core¥FileSystem::¥¥server¥share>
• 新)PS FileSystem::¥¥server¥share>
• -LiteralPath,-Credentialパラメータを全コマンドレットに
• Get-Contentで文字列を配列化せず読み込む
• Get-Content .¥a.txt -raw
• NTFS代替データストリームの読み書き
•
•
•
•
参照
付加
削除
列挙
Get-Content .¥a.txt -stream ":`$DATA"
Set-Content .¥a.txt -stream hoge -value fuga
Remove-Item .¥a.txt -stream hoge
Get-Item .¥a.txt -stream *
レジストリドライブ表示改善
•
•
PS2.0
SKC VC
--- -2
0
1
0
1
0
0
8
3
9
Name
---Shell Extensions
Sidebar
Telephony
ThemeManager
Themes
PS3.0
Name
---Shell Extensions
TaskManager
Telephony
ThemeManager
Property
-------{}
{}
{}
{ThemeActive, LoadedBefore...}
{ThemeChangesDesktopIcons, ...}
Property
-------HasFlushedShellExtSqmCache : 1
Preferences : {6, 0, 0, 0...}
PrePolicy-DllName
ThemeActive
LoadedBefore
LastUserLangID
LastLoadedDPI
:
:
:
:
:
C:¥Windows¥resources¥theme...
1
1
1033
96
既存コマンドレットの改善点
• デフォルトパラメータ
• $PSDefaultParameterValues = @{"GetProcess:Name"="powershell"}
• Select-Object 改善
• -First指定の場合、残りの項目のprocess{}実行キャンセル
• Import-Csv –Encoding パラメータ追加
• Out-GridView –PassThru で選択行を次のパイプに
送れるように
• コマンドレットの改善点は他にも多数
タブ補完の改善点
• TabExpansion→TabExpansion2
• System.Management.Automation.CommandCompletion
• パラメータセット認識
• 利用できないパラメータ名は候補にならない
• cdではディレクトリのみ候補に
• ForEach-Objectの$_に対してメンバ名を補完
• コマンドレットのパラメータ値に適した候補を補完
• モジュール・プロセス・ヘルプトピック・イベントログ・ジョブ・サービ
ス・文字コードなどの列挙体 etc
まとめ
• PowerShell 3.0 + Windows 8/Server 2012ではいよいよ
すべてのコンソールコマンドがコマンドレットに。
• PowerShellモジュールの上に管理GUIが乗る構造
• 開発サイドと運用サイドの協調
• 堅牢なセッションとワークフローのサポートにより、長時間
のタスクを並列してリモート実行するシナリオの実現。
• Windows Management Framework 3.0 により非
Windows サーバーも含めた何千、何万台のサーバーを統括
して管理対象に。
• 言語としても大幅に機能改善。
Q&A
42
Thank You!
ご清聴ありがとうございました!!
43