在 运行 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
频繁重新初始化变量的要求通常表明设计不佳。话虽如此,如果出于某种原因你仍然必须这样做,我会使用一个函数来(重新)初始化 global
或 script
范围内的变量集:
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
我会尽量简化这个例子。
$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
频繁重新初始化变量的要求通常表明设计不佳。话虽如此,如果出于某种原因你仍然必须这样做,我会使用一个函数来(重新)初始化 global
或 script
范围内的变量集:
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