如何使用PowerShell在远程计算机上安装Windows更新
我正在尝试使用以下命令在远程计算机上安装Windows更新:如何使用PowerShell在远程计算机上安装Windows更新,powershell,Powershell,我正在尝试使用以下命令在远程计算机上安装Windows更新: $InstallSplat = @{ AcceptAll = $true SendReport = $true IgnoreReboot = if ($Reboot) { $false } else { $true } PSWUSettings = @{ SmtpServer = "my mail server" From = "myfrom <myfrom@myf
$InstallSplat = @{
AcceptAll = $true
SendReport = $true
IgnoreReboot = if ($Reboot) { $false } else { $true }
PSWUSettings = @{
SmtpServer = "my mail server"
From = "myfrom <myfrom@myfrom.com>"
To = "myto <myto@myto.com>"
Port = 25
}
}
Invoke-Command -ComputerName $_ -Credential $cred -AsJob -ArgumentList $InstallSplat -ScriptBlock {
param([hashtable]$InstallSplat)
Import-Module PSWindowsUpdate
Install-WindowsUpdate @InstallSplat
$Error | out-file C:\install\installwinupdate.log -Append
}
命令Install WindowsUpdate
本身没有我可以使用的凭据参数。该命令需要在提升的PowerShell中运行,但我在计算机上启动此命令时使用提升的PowerShell
我还尝试用我的$cred
创建一个新的PSSession
,并运行调用命令-Session$Session
,而不是调用命令-ComputerName$
,结果相同
有人知道这里发生了什么吗?为什么我被拒绝访问
它与传递
$InstallSplat
没有任何关系,因为如果我根本不传递任何参数,直接在命令中写入参数及其值而不是splatting,就会发生同样的情况。问题是,您无法从另一台远程机器下载或安装更新。当涉及到Windows更新时,您可以或不能远程执行哪些操作
解决方案是,在要从远程脚本安装更新的每台服务器上创建一个计划任务,然后启动该任务
幸运的是,当您使用该模块时,您不必自己这样做,您只需使用调用WUJob
(以前的调用WUInstall
)就可以了
我是这样使用它的($ServerData.Value
包含我的服务器列表),它就像一个符咒。如果添加-RunNow
参数,它会在每台服务器上创建一个计划任务,并立即运行它们
invoke-WUJob -ComputerName $ServerData.Value -Script { Import-Module PSWindowsUpdate ; Install-WindowsUpdate -AcceptAll -SendReport -IgnoreReboot -PSWUSettings @{From='xy';Port=25;SmtpServer='xy';To='xy'} | Out-File C:\install\PSWindowsUpdateLog.txt -Append} -Confirm:$false -verbose -RunNow
请注意,您在
-script
中指定为脚本块的内容将粘贴到计划任务中的-Command”“
,因此您应该在-script
中使用可能重复的@GuentherSchmitz确定不,它肯定不是重复的。如果我不传递任何东西来调用命令,并且根本不使用splatting(刚刚测试过),同样的事情也会发生。根据它的说法,这是一种安全特性。这篇文章中的链接显示一些人使用JEA完成了这项工作。@GuentherSchmitz,所以即使他们从WSUS服务器获得更新,我也无法在远程计算机上下载WinUpdate?这真是一个遗憾,这是我从帖子中读到的-可以在周一或今天晚些时候在我的环境中测试这个,并向您报告
invoke-WUJob -ComputerName $ServerData.Value -Script { Import-Module PSWindowsUpdate ; Install-WindowsUpdate -AcceptAll -SendReport -IgnoreReboot -PSWUSettings @{From='xy';Port=25;SmtpServer='xy';To='xy'} | Out-File C:\install\PSWindowsUpdateLog.txt -Append} -Confirm:$false -verbose -RunNow