PowerShell ver2について
~ついにWindowsサーバー
管理環境の主流へ~
むたぐち(牟田口大介)
わんくま同盟 大阪勉強会 #30
牟田口大介の自己紹介
• フリーライターおよびフリープログラマー
– 2006~ チェック式 WSH入門(@IT)
– 2008 Windows PowerShell ポケットリファレンス
(技術評論社)
– 2009 PowerShellサーバー管理書籍(共著)7月
発売予定
–他
• Microsoft MVP for PowerShell
• http://winscript.jp/
わんくま同盟 大阪勉強会 #30
従来のWindows Server管理手法(GUI)
• マウスでクリックしてキーボードで入力が基本
わんくま同盟 大阪勉強会 #30
従来のWindows Server管理手法(CUI,スクリプト)
• コマンドプロンプト
– CUIのシェル。コンソールにコマンドをキーボード
から入力して動作を実行。cmd.exe
• バッチファイル
– コマンドプロンプトに入力することをあらかじめテ
キストファイルに書いておき一括実行。*.bat
• WSH
– VBScriptやJScriptを使ってテキストファイルにス
クリプトを記述。*.vbsなど
わんくま同盟 大阪勉強会 #30
従来のWindows Server管理手法の問題点
• GUI
– 繰り返し処理を行うには、何度もクリックやキー入力を手作業で繰り返
す必要がある
• CUI・スクリプト
– コマンドプロンプト・バッチファイル
• コマンドの種類が多様化、オプションもまちまちで分かりにくい
• テキストベースなのでコマンドの連携が困難
• 構文が貧弱なので複雑なことができない
– WSH
• 対話的な実行ができない(シェルとしての機能がない)
• 単純なことをやるだけでもコード量が長くなる
– 両者に共通の問題
• セキュアではない、リモート実行が困難、開発環境が標準機能とし
てないetc
わんくま同盟 大阪勉強会 #30
PowerShell v1の登場
• 2006年にリリース
• コマンドプロンプトやUNIXシェルのような対話的コンソール、
バッチファイルやWSHスクリプト、UNIXシェルスクリプトのよ
うな強力なスクリプト実行環境を併せ持つ、Windowsとしては
初めての本格的コマンドラインシェルである。
• .NET Framework 2.0をベースに動く
• Server 2003/XP/Vista用がDL可能
– 数ヶ月前からWindows Updateでもオプションで入るようになりました
• Server 2008では標準搭載(Server Coreでは使用不可)
– サーバーマネージャの機能の追加
• Exchange Server 2007などサーバー製品群に同梱
• ただし特に国内での注目度は低かった(と思う)
わんくま同盟 大阪勉強会 #30
そしてPowerShell v2の登場
• 2009年中に2008,2003,XP,Vista用がRTM予
定
• 現在はCTP3がDL可能
• Windows Server 2008 R2 / Windows 7の標
準機能に
• Windows Server 2008 R2 Server Coreでも
使用可能に
• さまざまな新機能
わんくま同盟 大阪勉強会 #30
PowerShell v2のインストール
• v1と共存できないのでまずはアンインストール
• .NET Framework 2.0以上をインストール
– ISEとグリッドを使うなら3.5 sp1をインストール
• バックグラウンドジョブとリモート機能を使うに
はWinRM2.0をインストール(現在CTP3)
• PowerShell ver.2をインストール(現在CTP3)
• Win 2008 R2 RC, Win 7 RCでは特にインス
トール作業必要なし
わんくま同盟 大阪勉強会 #30
統一化されたコマンド~コマンドレット~
• ネーミング規約
– Verb-Noun
• パラメータ
– -【パラメータ名】 or -【パラメータ名】 【パラメータ】
• 出力形式
– 表、リスト、幅広い表、グリッドnew!
• 資源へのアクセス方法
– ファイルシステム、レジストリ、環境変数などを統一的に扱
える
• エイリアス
– コマンドプロンプト風味、UNIXシェル風味、動詞名詞の頭文字
わんくま同盟 大阪勉強会 #30
強力なスクリプト実行環境
•
•
•
•
•
•
•
オブジェクトベース
GUIによる開発環境(PowerShell ISE)new!
モジュールの使用new!
リモート処理およびバックグラウンド処理new!
イベンティングnew!
セキュリティ
機能拡張(PSスナップイン、国際化new! 、Advanced
Functions new!)
• 豊富なコマンドラインオプション -windowStyle -file -sta
etc
• プロファイル
わんくま同盟 大阪勉強会 #30
PowerShell v2およびISEの動作デモ
•DEMO
わんくま同盟 大阪勉強会 #30
セキュリティ
• デフォルトではスクリプトの実行が不許可
– Set-ExecutionPolicy RemoteSignedなどで有効化
– Set-AutheticodeSignatureでコード署名を入れられる
• スクリプトファイルをタブルクリックするだけでは実行
されない
• カレントディレクトリにあるスクリプトを単純実行でき
ない
– .\script.ps1
• 特定のexe,コマンドレットのみ実行new!
– $ExecutionContext.SessionStateの各プロパティ
わんくま同盟 大阪勉強会 #30
モジュール
• 関数などをモジュール化可能new!
• *.psm1ファイル
• C:\Windows\System32\WindowsPowerShell\v1.0\
Modules\Mymodule\MyModule.psm1
function Get-AllItem
{
Get-ChildItem -recurse
}
Export-ModuleMember Get-AllItem
• Import-Module MyModule
わんくま同盟 大阪勉強会 #30
イベンティング
• .NETオブジェクトのイベントを補足することが
可能new!
$timer = New-Object Timers.Timer
$timer.Interval = 10000
Register-ObjectEvent -inputObject $timer eventName Elapsed -sourceIdentifier Test -Action
{イベント発生時に実行するコード}
$timer.Enabled = $true
Unregister-Event *
• WMIのイベント補足はRegister-WmiEvent
わんくま同盟 大阪勉強会 #30
Advanced Functions
• 旧称Script Cmdlets。PowerShellスクリプトを用いてコマンドレット(のよう
なもの)を作成可能new!
• 1ファイル1コマンドレットの場合:
param( [Parameter(Position=0,Mandatory=$true,ValueFromPipeline=$true)]
[Int]$Value )
process { return [math]::pow($Value,2) }
• .\Get-Square.ps1 -Value 5 や 1,2,3|.\Get-Square のように呼ぶ。
• 関数として書く場合(プロファイルなどに記述):
function Get-Square
{
[CmdletBinding()]
param([Parameter(Position=0, Mandatory=$true, ValueFromPipeline=$true)]
[Int]$Value )
process {return [math]::pow($Value,2)}
}
• ヘルプトピックスを含められる
わんくま同盟 大阪勉強会 #30
リモート処理/バックグラウンド処理
• WinRM2.0を用いたリモート処理およびバックグラウンド処理が可
能new!
• ローカルバックグラウンド(非同期)処理
– 処理の実行:Start-Job {<実行する命令文>}
– 結果の取得:Receive-Job <Get-Jobで得られたジョブID>
• リモート処理
– 実行先のサーバー上でwinrm quickconfig を実行しておく
– 同期実行:Invoke-Command @(サーバー名1,サーバー名2,サーバー名3)
{<実行する命令文>}
– 非同期実行:Invoke-Command サーバー名1 {<実行する命令文>} -asJob
– 非同期実行空間の作成: New-Pssession サーバー名1
– 実行空間での実行:Invoke-Command {<実行する命令文>} -Session
(Get-PSSession -Id <Get-PSSessionで得られるセッションID>)
– ファンイン(リモートのPSを直接操作):Enter-PSSession –Id 1
• プロンプトが変化:[win-3d9dezlgcmt]: PS C:\Users\Administrator.TEST>
わんくま同盟 大阪勉強会 #30
リモート実行のデモ
•DEMO
わんくま同盟 大阪勉強会 #30
v1→v2の文法の拡張
•
•
•
•
try~catch~finally
マルチラインコメント <#~#>
クロージャ $closure = {…}.GetNewClosure()
サブ式の省略
– $result = $( if ($true) { 42 } )
– $result = if ($true) { 42 }
– $sequence = foreach ($i in 0..15) { [math]::pow(2, $i) }
• 新しい演算子-splitと-join
わんくま同盟 大阪勉強会 #30
v1→v2 コマンドレットの追加と機能拡張
• 新しいコマンドレット(129個→236個)
– Add-Type: classの代わり
– *-Computer, *-EventLog, *-PSSession/InvokeCommand, *-Job, *-Event, *-Transaction, etc
• 既存のコマンドレットの機能拡張
– Select-String: -Encoding, -NotMatch, AllMatchesパラメータ追加
– Get-Member: -Viewパラメータ追加(PS拡張メン
バのみ表示など)
わんくま同盟 大阪勉強会 #30
まとめ
• これからのWindows Serverおよびサーバー
製品群はPowerShellベースの管理になりま
す。GUIもPowerShellを裏で動かすようになり
ます。
• そのためPowerShellを覚えておくとWindows
Serverを楽に動かせるようになります。
• サーバーだけでなくクライアントで使うのもよ
いです。クライアントで開発、サーバーでリ
モート実行というシナリオも。
わんくま同盟 大阪勉強会 #30
ダウンロード

PowerShell ver2について ~ついにWindowsサーバー