qshinoの日記

Powershell関係と徒然なこと

-whatif on powershell

-whatif

powershell のコモンパラメータの一つ、-whatif は、いわゆるドライランのオプション。Remove-itemやCopy-Itemなどで実行せずに、実行確認をする。

さて、実装するには?

-whatif実装

肝は、

if( $PSCmdlet.ShouldProcess( $target ) ){
  -whatif時に実行しないコマンド
}

こうすると、-whatif時に、

$targetに対し、xxx

の様なメッセージが表示される。-confirmでNoが選択された場合も同様。

else節に、実行しない時の処理を書けば詳細を表示できる?それとも別の動き?

-whatifを伝播させる

伝達させるには各関数に下記を記載する。

[CmdletBinding(SupportsShouldProcess=$True)]

伝播経路全てに上記を書くのはどうなの?スクリプトの場合は、スクリプトレベルにも必要?

参考

msdn/ShouldProcess

https://msdn.microsoft.com/en-us/library/ms568267(v=vs.85).aspx

http://stackoverflow.com/questions/11211518/how-to-use-dry-run-in-powershell

https://stuncloud.wordpress.com/2015/12/15/powershell_shouldprocess/