使用PowerShell

时间:2015-05-06 07:56:29

标签: powershell remote-access remote-desktop remote-server powershell-v4.0

我有一个可执行文件列表(.msi.exe),我必须使用PowerShell在某些远程服务器(在同一个域中)静默安装这些文件脚本。首先,我将所有程序从本地服务器复制到远程服务器。接下来,我尝试将所有这些程序逐个安装到远程服务器。为此,我使用下面的代码:

Copy-Item -Path "C:\path\to\softwares\*" -Destination "C:\path\to\destination"  # this is copying all softwares on destination path

$destItem = Get-ChildItem -Path "C:\path\to\destination"

foreach($software in $destItem)
{
    $setup = Invoke-Command -ComputerName <computer> -ScriptBlock {$temp=Start-Process "C:\path\to\$software" -ArgumentList "/s" -Wait -PassThrough;$Temp}
}

问题是:当我运行此脚本时,我收到以下错误:

  

[172.xx.xx.xxx]连接到远程服务器172.xx.xx.xxx失败,并显示以下错误消息:WinRM客户端   无法处理请求。在以下条件下,默认验证可与IP地址一起使用:   传输是HTTPS或目标位于TrustedHosts列表中,并提供显式凭据。使用   winrm.cmd配置TrustedHosts。请注意,TrustedHosts列表中的计算机可能未经过身份验证。更多   有关如何设置TrustedHosts的信息运行以下命令:winrm help config。有关更多信息,请参阅   about_Remote_Troubleshooting帮助主题。
      + CategoryInfo:OpenError:(172.xx.xx.xxx:String)[],PSRemotingTransportException
      + FullyQualifiedErrorId:CannotUseIPAddress,PSSessionStateBroken

我在本地计算机上运行了命令winrm quickconfig并得到了这个结果:

WinRM service is already running on this machine.
WinRM is already set up for remote management on this computer.

并从远程服务器获得此输出:

WinRm already is set up to recieve requests on this machine.
WinRm already is set up for remote management on this machine.
  • Windows版本:Windows Server 2012R2
  • PS版:4

问题是:如何解决此问题并在远程服务器上安装可执行文件?

2 个答案:

答案 0 :(得分:1)

您可能会尝试将远程计算机放入可信主机列表中:

  • 查看TrustedHosts列表 get-item wsman:\localhost\Client\TrustedHosts

  • 将所有计算机(小心!)添加到TrustedHosts列表中 set-item wsman:\localhost\Client\TrustedHosts -value *

  • 将具有特定IP地址的计算机添加到可信主机列表中 set-item wsman:\localhost\Client\TrustedHosts -value 192.168.0.10

答案 1 :(得分:1)

查看Matt Wrock关于在Windows上远程安装软件的文章:

http://www.hurryupandwait.io/blog/safely-running-windows-automation-operations-that-typically-fail-over-winrm-or-powershell-remoting

在他的Boxstarter库中,他通过使用Invoke-FromTask命令将命令包装在计划任务中来解决这个问题:

Invoke-FromTask @"
    Start-Process "$env:temp\net45.exe" -verb runas -wait `
      -argumentList "/quiet /norestart /log $env:temp\net45.log"
"@