【发布时间】:2014-07-16 11:47:52
【问题描述】:
运行以下代码会产生错误,因为用于路径的变量虽然在脚本中定义,但被解析为空事件:
$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
【问题讨论】:
-
使用可以尝试使用 $global:RemotePath = "C:\Test\" 作为全局变量,可以在整个脚本文件的任何地方访问
-
试过了,不行。
-
$using:RemotePath工作吗?