You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell脚本报错:为何需重新声明New-PSSession变量?

问题原因分析

你的问题根源在于WinRM服务重启导致原有PSSession失效,具体逻辑如下:

  1. 你先执行$Session = New-PSSession $env:hostname创建了一个PSSession,此时目标机器的WinRM服务处于正常运行状态,会话连接有效。
  2. 通过Invoke-CimMethod执行Enable-PSRemoting -Force时,这个命令会自动触发WinRM服务的重启(这是Enable-PSRemoting的默认行为,目的是加载新的远程配置,比如启用监听、更新防火墙规则等)。
  3. WinRM服务重启后,所有已建立的PSSession会被强制断开——服务重启会销毁所有现存的会话连接池,此时你之前创建的$Session变量指向的是一个已失效的会话对象,后续用它执行Invoke-Command或相关操作时,就会抛出Copy-Item : The runspace state is not valid for this operation错误。
  4. 重新执行$Session = New-PSSession $env:hostname相当于在WinRM服务重启完成后,重新建立了一个新的有效会话,所以后续命令能正常执行。

额外补充

如果你的目标机器原本已经启用了PSRemoting,Enable-PSRemoting -Force依然会强制重置WinRM配置并重启服务,这也是为什么即使单独执行两段脚本没问题,但连续执行时旧会话会失效的原因——单独执行时,你可能是在WinRM重启后再创建的会话,而连续执行时旧会话在重启前就已经存在了。

内容的提问来源于stack exchange,提问作者DrixlRey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:15:40