gpt4 book ai didi

powershell - Scriptblock 中的全局范围变量为空

转载 作者:行者123 更新时间:2023-12-01 05:11:09 27 4
gpt4 key购买 nike

运行以下代码会产生错误,因为用于 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 )

关于powershell - Scriptblock 中的全局范围变量为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24780027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com