运行以下代码会产生错误,因为尽管在脚本中定义了用于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)

09-25 17:39