运行以下代码会产生错误,因为尽管在脚本中定义了用于path的变量,但该变量仍被解析为null事件:
$ServerName = "test01"
$RemotePath = "C:\Test\"
$TestScriptBlock = { copy-item -Path $RemotePath -Destination C:\backup\ -Force -Recurse }
$CurrentSession = New-PSSession -ComputerName $ServerName
Invoke-Command -Session $CurrentSession -ScriptBlock $TestScriptBlock
如何从ScriptBlock内调用父脚本中定义的$ RemotePath?我需要在父脚本的其他部分中使用$ RemotePath。注意,该值不会改变,因此可以是一个常数。
更新-解决方案
您必须将变量作为参数传递给脚本块:
$ServerName = "test01"
$RemotePath = "C:\Test\"
$TestScriptBlock = { param($RemotePath) copy-item -Path $RemotePath -Destination C:\backup\ -Force -Recurse }
$CurrentSession = New-PSSession -ComputerName $ServerName
Invoke-Command -Session $CurrentSession -ScriptBlock $TestScriptBlock -ArgumentList $RemotePath
最佳答案
您在那里有两个脚本,而不是一个。 $ TestScriptBlock是一个嵌套在主脚本中的单独脚本,您将其发送到远程计算机,并且该远程计算机未配置$ RemotePath。尝试:
$ServerName = "test01"
$TestScriptBlock = {
$RemotePath = "C:\Test\"
copy-item -Path $RemotePath -Destination C:\backup\ -Force -Recurse
}
$CurrentSession = New-PSSession -ComputerName $ServerName
Invoke-Command -Session $CurrentSession -ScriptBlock $TestScriptBlock
(不过,我可能会称其为$ LocalPath)