如何在退出Enter-PSSession远程会话后保存变量值
获取Enter-PSSession退出后的远程会话变量值
方法1:通过远程文件传递变量
在交互式远程会话内,将变量写入远程机器的本地文件:
# 远程会话内执行 $remote_var = '3333' $remote_var | Out-File -Path C:\temp\remote_var.txt -Encoding UTF8
退出会话后,在本地通过UNC路径读取该文件:
# 本地执行,替换RemotePC为实际远程机器名 Get-Content \\RemotePC\C$\temp\remote_var.txt
注意:确保远程机器的C:\temp目录存在,且本地账户拥有该共享路径的读取权限。
方法2:利用PSSession对象的自定义属性传递
先在本地创建并保存PSSession对象,再进入交互式会话:
# 本地执行,创建会话并保存到变量 $session = New-PSSession -ComputerName RemotePC # 进入交互式远程会话 Enter-PSSession -Session $session
在远程会话内,将变量存入当前会话的CustomProperties集合:
# 远程会话内执行 $remote_var = '3333' $PSSession.CustomProperties['remote_var'] = $remote_var
执行Exit-PSSession退出后,直接在本地通过之前保存的会话对象获取变量:
# 本地执行 $session.CustomProperties['remote_var']
该方法无需依赖文件,变量直接存储在本地维护的会话对象中,只要会话未关闭即可访问。
方法3:存入远程机器的环境变量(需管理员权限)
如果需要变量在远程会话重启后仍保留,可将其存入远程机器的系统环境变量(需以管理员身份操作):
# 远程会话内执行 $remote_var = '3333' [Environment]::SetEnvironmentVariable('remote_var', $remote_var, 'Machine')
退出会话后,即使远程会话关闭,也可通过以下方式读取(仅调用一次Invoke-Command,不影响持续会话需求):
# 本地执行 Invoke-Command -ComputerName RemotePC -ScriptBlock { $env:remote_var }
内容的提问来源于stack exchange,提问作者Oleg0341
相关产品推荐
相关产品推荐

