如何在不退出PowerShell远程会话的情况下传递变量
在已建立的PowerShell远程会话中传递变量的方法
当然可以实现,不用退出已建立的远程会话就能传递本地变量$var1的值到远程端,下面是几种实用的实现方式:
方式一:进入交互式会话前预先注入变量
在调用Enter-PSSession之前,用Invoke-Command在同一个远程会话中定义好变量,进入交互式会话后就能直接使用:
$var1 = 'some text' $session = New-PSSession -ComputerName <Server> Invoke-Command -FilePath $profile -Session $session # 将本地变量$var1注入远程会话的全局变量中 Invoke-Command -Session $session -ScriptBlock { $global:remoteVar1 = $using:var1 } Enter-PSSession -Session $session # 直接调用变量即可获取值 $remoteVar1
方式二:利用会话私有数据传递
PowerShell远程会话对象自带私有数据存储功能,先把本地变量存入会话对象,进入交互式会话后再取出:
$var1 = 'some text' $session = New-PSSession -ComputerName <Server> Invoke-Command -FilePath $profile -Session $session # 将本地变量存入会话的私有数据字典 $session.PrivateData['LocalVar1'] = $var1 Enter-PSSession -Session $session # 从会话私有数据中取出变量值 $var1 = $PSSession.PrivateData['LocalVar1'] # 验证变量 $var1
方式三:进入交互式会话后动态传递
如果已经进入了远程会话,不用退出,直接在交互式环境中调用Invoke-Command针对当前会话传递变量:
# 假设已进入远程会话 Enter-PSSession -Session $session # 在交互式会话中执行命令,传递本地$var1 Invoke-Command -Session $PSSession -ScriptBlock { $global:var1 = $using:var1 } # 现在远程会话中可直接使用$var1 $var1
注意:$using:是PowerShell 3.0及以上版本支持的语法,用于在远程脚本块中引用本地变量;若使用更低版本,可通过-ArgumentList参数传递变量,示例:
Invoke-Command -Session $session -ScriptBlock { $global:remoteVar1 = $args[0] } -ArgumentList $var1
内容的提问来源于stack exchange,提问作者Oleg0341
相关产品推荐
相关产品推荐

