使用 PowerShell 2.0 在远程计算机上运行批处理文件

Posted

技术标签:

【中文标题】使用 PowerShell 2.0 在远程计算机上运行批处理文件【英文标题】:Running batch file on Remote Computers using PowerShell 2.0 【发布时间】:2013-03-11 10:31:04 【问题描述】:

我正在尝试在远程机器上运行一个 exe,它基本上会卸载产品代理。下面是代码:

$test = Get-Content PC.txt

foreach ($a in $test)

   $curr = Get-Location
   Set-Location \\$a\Admin$\System32\CCMSetup
   .\ccmsetup.exe /uninstall
   Set-Location $curr

它不起作用。我最终从主机本身中删除了该程序:)

替代选项:我使用命令行创建了一个批处理文件:

cd C:\Windows\System32\ccmsetup
ccmsetup /uninstall
exit

看来以上也可以使用Invoke-Command来实现。

Invoke-Command -ComputerName $client -FilePath UninstallCCM.cmd

显然,它不接受批处理文件。我想让它尽可能简单。

目前我正在使用 PSExec 安装和卸载程序。我是否需要在需要使用 PowerShell 执行脚本的每台远程计算机上启用 PS Remoting (WinRM)? 有人可以帮忙吗?提前致谢。

【问题讨论】:

【参考方案1】:

这个命令应该会成功执行:

Invoke-Command -ComputerName $client -ScriptBlock  cd C:\Windows\System32\ccmsetup; ccmsetup /uninstall -Credential $(Get-Credential) -Authentication CredSSP

但您需要通过在每台机器上运行这两个命令来在所有机器上启用 CredSSP 身份验证:

Enable-WsManCredSSP -Role Server -Force
Enable-WSManCredSSP -Role Client -DelegateComputer * -Force

【讨论】:

真的需要 CredSSP 吗? 尝试不使用凭据和身份验证选项,您可能会遇到身份验证错误。 是不是说它被禁用了?您可能需要运行“winrm quickconfig”来启用它 @Rajiv - 这将起作用(一旦您正确设置远程处理)并且您的初始脚本不起作用的原因是您的初始脚本实际上并未在远程主机上执行任何操作 - 相反,您重新指向 UNC 路径并告诉您的本地系统执行在那里找到的 EXE。相反,您必须在该远程系统本身上执行程序。 是的,win 已禁用。运行 winrm quickconfig 应该可以解决问题。【参考方案2】:

我强烈推荐下载PSTools。里面有个命令叫“psexec”

PSexec 就是这么简单,你这样称呼它:

psexec \\myserver C:\Windows\System32\ccmsetup /uninstall

【讨论】:

是的,我正在使用 PSExec 安装和卸载程序。我想知道是否必须在要从我的管理计算机执行脚本的每台远程计算机上配置 PowerShell 远程处理 (WinRM)。 是的,您必须在希望远程执行 PowerShell 的每台计算机上启用 PowerShell 远程处理。 是的,您必须在每台机器上启用它。

以上是关于使用 PowerShell 2.0 在远程计算机上运行批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 访问远程计算机时出现审计错误

尝试使用模拟在远程计算机上运行 PowerShell 脚本时“不允许请求的注册表访问”

使用 PowerShell 在远程计算机上启动监视应用程序时的性能计数器访问

Powershell 远程配置文件

如何使用 PowerShell 获取远程计算机的可用物理内存

powershell 脚本在 100 台计算机上重新启动服务