我正在尝试运行一个脚本,该脚本使用WinRM在远程计算机上搜索/下载/安装Windows更新。我正在以具有管理员访问权限的域用户身份运行此脚本。但是,出现“拒绝访问”错误。
现在,我已将脚本复制到远程服务器,但无法查看输出以查看脚本是否正在运行。
# 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
答案 0 :(得分: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:\
$server
更改为{$scriptpath}
或{. $scriptpath}
变量{& $scriptpath}
不在脚本块范围内-您将必须在$scriptpath
更改:-ArgumentList
____收件人:{$scriptpath} -ArgumentList "Y"
参数“ Y”被传递给脚本组,而不是脚本。脚本块找不到它,因此该值丢失了。
假设您希望将其传递给脚本-这需要在脚本块中完成:
{param($p); . $p} -ArgumentList $scriptpath
我建议您摆脱{$scriptpath "Y"}
,直到您对控制台中的输出感到满意为止。
将它们放在一起:
Out-File
答案 1 :(得分:0)
我相信您注释了错误的Invoke-Command。正在运行的计算机的凭据参数中的用户名为hhq \ admin。因此可能会失败,因为它将在运行时提示输入密码。