运行Invoke-Command后访问脚本块中定义的变量

时间:2018-01-10 22:28:31

标签: powershell invoke-command

我会尽量使这个例子变得简单。

$myValues = {
    $value1 = "hello"
    $value2 = "world"
}

Invoke-Command $myValues

$value1执行后如何访问$value2Invoke-Command

编辑:我想解决的问题是我必须在整个脚本中多次初始化$myValues内的变量。所以我想我会在顶部定义脚本块ONCE,然后只要我需要重新初始化变量就在Invoke-Command上调用$myVariables

3 个答案:

答案 0 :(得分:4)

如果您点源脚本块,它将在您当前的范围内运行,之后变量将可用。

$myValues = { 
    $value1 = "hello"
    $value2 ="world"
}

. $myValues 

答案 1 :(得分:1)

返回scriptblock中的两个值,并为invoke-command分配一个变量。然后,您可以从返回的数组中访问变量:

$myValues = { 
    $value1 = "hello"
    $value2 ="world"
    $value1
    $value2
}

$remoteOutput = Invoke-Command $myValues
$remoteOutput[0]
$remoteOutput[1]

在我的计算机上测试的输出将是:

hello
world

如果这解决了您遇到的问题,请告诉我。如果不是,我们可以为不同的解决方案而努力!

答案 2 :(得分:0)

频繁重新初始化变量的要求通常表明设计不佳。话虽如此,如果由于某种原因你仍然必须这样做,我会使用一个函数来(重新)初始化globalscript范围内的变量集:

function Initialize-VariableSet {
    $script:value1 = 'hello'
    $script:value2 = 'world'
}

演示:

PS C:\> Initialize-VariableSet
PS C:\> $value1
hello
PS C:\> $value1 = 'foobar'
PS C:\> $value1
foobar
PS C:\> Initialize-VariableSet
PS C:\> $value1
hello