我想你不能这么做
$servicePath = $args[0]
if(Test-Path -path $servicePath) <-- does not throw in here
$block = {
write-host $servicePath -foreground "magenta"
if((Test-Path -path $servicePath)) { <-- throws here.
dowork
}
}
那么我如何将变量传递给scriptblock $block呢?
8条答案
按热度按时间lfapxunr1#
Keith's answer也适用于
Invoke-Command
,但有一个限制,即不能使用命名参数。参数应该使用-ArgumentList
参数设置,并且应该用逗号分隔。另请参见here和here。
hpcdzsge2#
脚本块只是一个匿名函数,例如,您可以在脚本块中使用
$args
,也可以声明一个参数块hgtggwj03#
顺便说一句,如果使用脚本块在单独的线程(多线程)中运行:
则产生:
cmssoen24#
对于任何想在远程会话脚本块中使用局部变量的阅读,从Powershell 3.0开始,您可以使用“$Using”作用域修饰符直接在脚本块中使用局部变量。
可在https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/invoke-command?view=powershell-7的示例9中找到
gopyfrb35#
默认情况下,PowerShell不会捕获ScriptBlock的变量。但是,您可以通过在其上调用
GetNewClosure()
来显式捕获变量:dwthyt8l6#
三个示例语法:
7gcisfzg7#
我知道这篇文章有点过时了,但是我想把它作为一个可能的替代品扔掉。只是以前答案的一个微小的变化。
wgmfuz8q8#
其他可能性: