用于在远程服务器上并行

时间:2017-08-22 10:43:14

标签: powershell

我编写了一个脚本来并行执行远程服务器上的exe。但是当exe执行时,我收到错误。任何人都可以帮我纠正我的剧本吗?

    ForEach ($Computer in Get-Content C:\servers.txt)
{

#To enable winrm if not already
$result = winrm id -r:$computer 2> $null
    if ($lastExitCode -eq 0) {
    Write-Host "WinRM already enabled on" $computer "..." -ForegroundColor green
    } else {
    Write-Host "Enabling WinRM on" $computer "..." -ForegroundColor red 
     \\slcmpx\c$\windows\system32\PsExec.exe \\$computer -accepteula -s C:\Windows\System32\winrm.cmd qc -quiet 

    if ($LastExitCode -eq 0) {
        \\slcmpx\c$\windows\system32\PsService.exe \\$computer restart WinRM 
        $result  = winrm id -r:$computer 2>$null

    if ($LastExitCode -eq 0) {Write-Host "WinRM successfully enabled!" -ForegroundColor green}
        else {Write-Host "WinRM not enabled!" -ForegroundColor red}

       } #end of if

    } #end of else  

       echo "$Computer"
      Invoke-Command -ComputerName $Computer -ScriptBlock {Set-ExecutionPolicy unrestricted -force}

      $creds = Get-Credential
      $PSSession = New-PSSession -ComputerName $Computer -Credential $creds -Authentication Credssp
      Invoke-Command -Session $PSSession -ScriptBlock {Invoke-Expression -Command 'c:\windows\WUInstall.exe /install /reboot'}                             
} 

错误:

PS C:\ Users \ sand \ Desktop> \ pssession.ps1 已在服务器1上启用WinRM ... server1的

命令管道位置1处的cmdlet Get-Credential 提供以下参数的值: 凭据 New-PSSession:[server1]连接到远程服务器server1失败,并显示以下错误消息:WinRM 客户端无法处理请求。 CredSSP身份验证当前在客户端配置中已禁用。更改 客户端配置并再次尝试请求。还必须在服务器中启用CredSSP身份验证 组态。此外,必须编辑组策略以允许将凭据委派给目标计算机。使用gpedit.msc 并查看以下策略:计算机配置 - >管理模板 - >系统 - >证书 授权 - >允许委派新证书。验证是否已启用并配置了适当的SPN 对于目标计算机。例如,对于目标计算机名称" myserver.domain.com",SPN可以是其中一个 以下内容:WSMAN / myserver.domain.com或WSMAN / * .domain.com有关详细信息,请参阅about_Remote_Troubleshooting 帮助主题。 在C:\ Users \ sand \ Desktop \ pssession.ps1:34 char:20 + $ PSSession = New-PSSession -ComputerName $ Computer -Credential $ creds -Aut ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~     + CategoryInfo:OpenError:(System.Manageme .... RemoteRunspace:RemoteRunspace)[New-PSSession],PSRemotin    gTransportException     + FullyQualifiedErrorId:-2144108126,PSSessionOpenFailed Invoke-Command:无法验证参数' Session'的参数。参数为null或空。提供一个论点 这不是null或空,然后再次尝试该命令。 在C:\ Users \ sand \ Desktop \ pssession.ps1:35 char:32 + Invoke-Command -Session $ PSSession -ScriptBlock {Invoke-Expression -Comma ... + ~~~~~~~~~~     + CategoryInfo:InvalidData :( :) [Invoke-Command],ParameterBindingValidationException     + FullyQualifiedErrorId:ParameterArgumentValidationError,Microsoft.PowerShell.Commands.InvokeCommandCommand

PS C:\ Users \ sand \ Desktop>

注意: WUInstall.exe是通过联系每个地区的相应WSUS服务器来安装补丁的工具

1 个答案:

答案 0 :(得分:0)

尝试在远程服务器上本地运行此命令,或者通过连接远程服务器的PSsesion。如果能够成功执行此方法,请确保在使用PSsession远程服务器的上述脚本中使用相同的凭据。 e.g

New-PSSession -ComputerName $ Computer -cred