Powershell Hashtable - 在嵌套脚本块中访问外部对象

时间:2014-03-11 20:22:45

标签: powershell

如果我有一个powershell哈希对象,那么:

$hash = @{
             Prop1 = "Hello";
             Prop2 = "Goodbye";
             ArbitraryScriptBlock = { Do-Things -SomeParameter ThisHashTable?}
         }

我想将$hash的整个值传递给Do-Things函数,或多或少类似于将this作为参数传递给C#中的方法:

 var results = DoThings(this);

这可能吗?

1 个答案:

答案 0 :(得分:3)

是的,你可以这样做。只需将参数传递给脚本块并使用$args数组来获取参数,如下所示:

$hash = @{
             Prop1 = "Hello";
             Prop2 = "Goodbye";
             ArbitraryScriptBlock = { Write-Host $args[0].Prop1 }
         }

$hash.ArbitraryScriptBlock.Invoke($hash)

我通常更喜欢指定我的函数和脚本块作为输入的参数,它们看起来类似于:

$hash = @{
             Prop1 = "Hello";
             Prop2 = "Goodbye";
             ArbitraryScriptBlock = { PARAM( $this ) Write-Host $this.Prop1 }
         }

$hash.ArbitraryScriptBlock.Invoke($hash)

注意:$this变量名称并不特别,您可以将其命名为任何名称。

您还可以使用&调用运算符来执行脚本块,这也允许您调用脚本块,提供熟悉的语法:

$hash = @{
            Prop1 = "Hello";
            Prop2 = "Goodbye";
            ArbitraryScriptBlock = { PARAM( $ParamName ) Write-Host $ParamName.Prop1 }
        }

& $hash.ArbitraryScriptBlock $hash
# Or, perhaps even nicer:
& $hash.ArbitraryScriptBlock -ParamName $hash 

我建议您阅读有关脚本块的帮助部分,您可以致电Get-Help about_Script_Blocks来获取。