私はPowershellの初心者ですが、プログラミングn00bではありません。次のようなIDisposable/RAIIスタイルのフェイルセーフパターンを作成しようとしています。
http://www.sbrickey.com/Tech/Blog/Post/IDisposable_in_PowerShell
ので、私は持っています:
Function global:FailSafeGuard
{
param (
[parameter(Mandatory=$true)] [ScriptBlock] $execute,
[parameter(Mandatory=$true)] [ScriptBlock] $cleanup
)
Try { &$execute }
Finally { &$cleanup }
}
私はそれを使用して、別のディレクトリで一連のタスクを実行しようとしています。途中でPush-Locationを使用し、途中でPop-Locationを使用します。ので、私は持っています:
Function global:Push-Location-FailSafe
{
param (
$location,
[ScriptBlock] $execute
)
FailSafeGuard {
Push-Location $location;
&$execute
} { Pop-Location }
}
Push-Location-FailSafeの$executeパラメーターがFailSafe関数の$executeパラメーターと衝突していることがわかりました。
Push-Location-FailSafe "C:\" {dir}
The expression after '&' in a pipeline element produced an invalid object. It must result in a command name, script block or CommandInfo object.
At C:\TEMP\b807445c-1738-49ff-8109-18db972ab9e4.ps1:line:20 char:10
+ &$ <<<< execute
名前の衝突だと思う理由は、Push-Location-FailSafeで$executeの名前を$execute2に変更すると、正常に機能するためです。
Push-Location-FailSafe "C:\" {dir}
Directory: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2011-08-18 21:34 cygwin
d---- 2011-08-17 01:46 Dell
[snip]
パラメータの理解の何が問題になっていますか?