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

Accessing variables defined in a scriptblock after running Invoke-Command

我会尽量简化这个例子。

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

Invoke-Command $myValues

如何在 Invoke-Command 执行后访问 $value1$value2

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

Return 脚本块中的两个值并为您的调用命令分配一个变量。然后您可以访问返回数组中的变量:

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

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

在我的电脑上测试的输出将是:

hello
world

如果这能解决您遇到的问题,请告诉我。如果没有,我们可以努力寻找不同的解决方案!

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

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

. $myValues 

频繁重新初始化变量的要求通常表明设计不佳。话虽如此,如果出于某种原因你仍然必须这样做,我会使用一个函数来(重新)初始化 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