如何针对Windows Server WinRM运行脚本

时间:2018-10-11 14:19:45

标签: powershell remote-server winrm

我正在尝试运行一个脚本,该脚本使用WinRM在远程计算机上搜索/下载/安装Windows更新。我正在以具有管理员访问权限的域用户身份运行此脚本。但是,出现“拒绝访问”错误。

现在,我已将脚本复制到远程服务器,但无法查看输出以查看脚本是否正在运行。

我想看的输出:enter image description here

# Continue running on other servers on error
$ErrorActionPreference = "Continue"

# Server list
$servers = Get-Content "C:\Users\admin\Desktop\vm-nonprod.txt"

# Logs
$log = "C:\Users\admin\Desktop\log-nonprod.txt"

# Path to script on server list
$scriptpath = "C:\Patch.ps1"

$results = @()

foreach ($server in $servers) {

    try {

        $Credential = Import-CliXml -Path "C:\Users\admin\Desktop\admin.Cred"

        #New-PSSession -ComputerName $server -Credential $Credential
        Invoke-Command -ComputerName $server -Credential $Credential -ScriptBlock {$scriptpath} -ArgumentList "Y" | Out-File -FilePath C:\Users\admin\Desktop\WinPatch.txt
        #Invoke-Command -ComputerName $server -Credential hhq\admin -FilePath "C:\Users\admin\Documents\Patch.ps1"
        #Copy-Item -Path C:\Users\admin\Documents\Patch.ps1 -Destination 'C:\' -ToSession (New-PSSession –ComputerName $server -Credential $Credential)
    }
    catch {
        Write-Output ("Error running script on remote host: " + $server)
    }
}

$results | Export-Csv -NoTypeInformation $log

2 个答案:

答案 0 :(得分:1)

这里有几个问题。

  1. 该脚本在服务器上是否存在?
    听起来像是的,每个date symbol data 10/9/2018 a 0.1 10/9/2018 b 0.2 10/9/2018 c 0.3 上的Patch.ps1中都有C:\
  2. 脚本块不运行脚本-仅打印变量。
    要运行它,请将$server更改为{$scriptpath}{. $scriptpath}
  3. 变量{& $scriptpath}不在脚本块范围内-您将必须在$scriptpath

    中传递它

    更改:-ArgumentList
    ____收件人:{$scriptpath} -ArgumentList "Y"

  4. 参数“ Y”被传递给脚本组,而不是脚本。脚本块找不到它,因此该值丢失了。
    假设您希望将其传递给脚本-这需要在脚本块中完成:
    {param($p); . $p} -ArgumentList $scriptpath

  5. 我建议您摆脱{$scriptpath "Y"},直到您对控制台中的输出感到满意为止。


将它们放在一起:

Out-File

答案 1 :(得分:0)

我相信您注释了错误的Invoke-Command。正在运行的计算机的凭据参数中的用户名为hhq \ admin。因此可能会失败,因为它将在运行时提示输入密码。