我有一个远程windows更新脚本的问题。我的目标:在不使用WSUS或SCCM的情况下,从PowerShell更新所有Windows服务器,而不必登录到所有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服务器并以提升权限批处理运行它不是问题,但这是唯一的方法吗?
我会做批量解决方案,看看我可以实现什么,但有没有其他的解决方案,在我面临的问题?有人尝试过吗?
非常感谢你的时间!我也开放的任何意见,我的代码或修复!
4条答案
按热度按时间bttbmeg01#
如果您的问题是管理员权限、提升的提示,以下内容可能会对您有所帮助。
检查是否以管理员身份运行的PS代码。如果不是,它将以管理员身份重新启动。
您可能还需要在注册表中的
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\
处修改ConsentPromptBehaviorAdmin
下面是一个简单得BAT文件,它将绕过PS执行策略,然后启动PS脚本(假设它们得名称相同).
添加PS脚本的结尾,您可以使用
Set-ExecutionPolicy -ExecutionPolicy Restricted -Scope LocalMachine -Force
将执行策略重新设置为restricted或您已设置的值。oxcyiej72#
我在尝试使用
Invoke-Command
导入远程机器上的模块时遇到了这个问题。有一个安全函数不允许您这样做。您可以尝试运行以下命令,看看是否能更成功地导入新模块。m1m5dgzv3#
我选择了任务调度解决方案,因为它看起来更容易。
我创建了名为WUpdates.ps1的脚本
以及创建名为WinUpdateScheduler.ps1的计划任务的脚本
然后在主脚本中调用schedule脚本并安装我的更新。
如果有人想要完整的脚本,我可以提供它。作为Nixphoe和Backin的答案,我会检查他们,我会回来后评论他们。
非常感谢您抽出时间。
nkoocmlb4#
https://4sysops.com/archives/install-windows-updates-remotely-with-the-powershell/