Как установить обновления Windows на удаленном компьютере с помощью PowerShell - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь установить обновления Windows на удаленном компьютере с помощью этой команды:

$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
}

Я передаю объект учетных данных с правами администратора домена в $cred, но все равно всегда получаю эту ошибку

Install-WindowsUpdate : Access denied (Ausnahme von HRESULT: 0x80070005 (E_ACCESSDENIED)) In Zeile:4 Zeichen:25
+                         Install-WindowsUpdate @InstallSplat
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Get-WindowsUpdate], UnauthorizedAccessException
    + FullyQualifiedErrorId : System.UnauthorizedAccessException,PSWindowsUpdate.GetWindowsUpdate

Сама команда Install-WindowsUpdate не имеет параметра учетных данных, который я мог бы использовать. Команду нужно запускать в PowerShell с повышенными привилегиями, но при запуске этой команды на моем компьютере я использую PowerShell с повышенными привилегиями.

Я также попытался создать New-PSSession с моим $cred и запустить Invoke-Command -Session $session вместоInvoke-Command -ComputerName $_ с тем же результатом.

Кто-нибудь знает, что здесь происходит? Почему мне отказывают в доступе?

Это не может иметь ничего общего с передачей $InstallSplat, потому что то же самое происходит, если я вообще не передаю какой-либо параметр и напрямую пишу параметры и их значения. по команде вместо сплаттинга.

1 Ответ

1 голос
/ 26 октября 2019

Проблема заключалась в том, что вы не можете загрузить или установить обновления на компьютере с другого удаленного компьютера. Вот список что вы можете или не можете делать удаленно, когда дело касается обновлений Windows

Решение состоит в том, чтобы создать запланированное задание на каждом сервере, на котором вы хотите установить обновления с удаленного компьютера. и запустите эту задачу.

к счастью, когда вы используете модуль PSWindowsUpdate , вам не нужно делать это самостоятельно, вы можете просто использовать Invoke-WUJob (ранее Invoke-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 " <here> " в запланированном задании, поэтому вы должны работать с ' внутри -Script.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...