【发布时间】:2019-03-19 14:54:46
【问题描述】:
我的远程 Windows 更新脚本有问题。 我的目标:在不使用 WSUS 或 SCCM 的情况下,从 PowerShell 更新所有 Windows 服务器,而无需登录所有服务器并启动更新过程。
对于我的脚本,我使用的是 powercli 和 PSWindowsUpdate 模块。 出于测试目的,我在 $hostname 变量中使用单个主机。
这就是我所拥有的。
$Cred = Get-Credential
Import-Module PSWindowsUpdate
Invoke-Command -ComputerName $HostName {Import-Module PSWindowsUpdate} -Verbose -Credential $Cred
Invoke-Command -ComputerName $HostName {Add-WUServiceManager -ServiceID 7971f918-a847-4430-9279-4a52d1efe18d -Confirm:$false} -Verbose -Credential $Cred
Invoke-Command -ComputerName $HostName -ScriptBlock {Get-WUInstall -MicrosoftUpdate -IgnoreUserInput -AcceptAll -AutoReboot -Confirm:$FALSE -Verbose | Out-File C:\Setup\PSWindowsUpdate.log } -credential $cred
Get-Content \\$HostName\c$\Setup\PSWindowsUpdate.log
运行脚本后,从关机、快照、开机开始一切正常,但我无法安装任何更新。 我收到以下错误:
WARNING: To perform some operations you must run an elevated Windows PowerShell console.
WARNING: Can't access to machine "hostName". Try use: winrm qc
当我搜索时,我发现我无法在 PowerShell 本身中进行任何提升,我正在阅读一些关于运行 CMD bat 以提升权限启动 PowerShell 的帖子。 将更新脚本复制到每个 Windows 服务器并以提升的权限批量运行它对我来说不是问题,但这是唯一的方法吗?
我会做批处理解决方案,看看我能实现什么,但我面临的问题还有其他解决方案吗? 有人试过吗?
非常感谢您的宝贵时间! 我也愿意对我的代码或修复发表任何评论!
【问题讨论】:
-
您只需要包含 minimal reproducible example... 的代码...只有代码的最后 6 行与您的问题相关。由于其余部分工作正常,因此无需包含它,像您这样拥有大量代码只会让人们看不到它。
-
感谢您的评论@JamesC。我只是用给我错误的部分编辑了代码。如果有人想查看完整的脚本,我只想提供我对脚本所做的事情。
-
现在使用批处理文件,我必须按接受 UAC 以提升权限运行 powershell,但我不希望这样。有没有办法绕过该 UAC 而无需从操作系统禁用它?我正在阅读有关计划任务的信息,并且我知道我可以做到这一点,因为我的许多生成报告的脚本都是这样运行的。调度器是唯一的解决方案吗?
标签: windows powershell powercli windows-update