PowerShell远程脚本中cd C:命令无法执行问题求助
问题原因分析
Enter-PSSession会启动一个交互式远程会话,此时脚本执行会暂停,直到你退出该会话(执行Exit-PSSession)。因此你写在它后面的Invoke-Command不会在这个交互式会话里执行,而是等你退出后才运行,且Invoke-Command会单独创建新的远程会话执行脚本块。- 另外,
cd C:在Invoke-Command的脚本块中执行时,仅切换了该临时会话的当前目录,但会话执行完毕就会销毁,你看不到持久效果——要验证切换是否成功,需在同一个脚本块里后续执行相关命令(比如Get-Location查看当前路径)。
解决方案
方案1:交互式会话手动操作
若需要进入远程机器的交互式环境手动执行命令,保留Enter-PSSession部分,进入会话后直接在控制台输入cd C:即可:
Enable-PSRemoting -Force $password = ConvertTo-SecureString "xxxxxxxxx" -AsPlainText -Force $username = "NE\a_chermes2" $Cred = New-Object System.Management.Automation.PSCredential ($username, $password) Enter-PSSession -ComputerName NESCH11 -Credential $cred # 进入会话后手动输入 cd C: 执行
方案2:用Invoke-Command自动执行远程命令
若要通过脚本自动执行远程命令(包括切换目录后的操作),无需Enter-PSSession,直接把所有命令放在同一个Invoke-Command脚本块中:
Enable-PSRemoting -Force $password = ConvertTo-SecureString "xxxxxxxxx" -AsPlainText -Force $username = "NE\a_chermes2" $Cred = New-Object System.Management.Automation.PSCredential ($username, $password) Invoke-Command -ComputerName NESCH11 -Credential $cred -ScriptBlock { cd C: Get-Location # 验证当前目录是否切换成功 # 这里可添加后续需要执行的命令 }
额外提示
- 不要混合使用
Enter-PSSession和Invoke-Command,两者场景不同:前者用于交互式操作,后者用于自动化批量执行远程命令。 - 若远程机器PowerShell默认目录不符合需求,可在
Invoke-Command里用Set-Location(cd是它的别名),且确保后续命令在同一个脚本块中执行,才能基于切换后的目录操作。
内容的提问来源于stack exchange,提问作者Hermes1160
相关产品推荐
相关产品推荐

