#powershell #windows-update
#powershell #центр обновления Windows
Вопрос:
Я хочу развернуть обновления на серверах Windows в нашем домене. Для достижения этого я хочу использовать модуль «PSWindowsUpdate», вот официальная версия. Я использую этот модуль в сочетании с PSSessions и импортирую его локально на все серверы за пределами пути к модулю по умолчанию.
Он должен принять обновления и установить их без перезагрузки. Этот скрипт запускается с использованием администратора домена
После того, как он примет обновления, он должен начать загрузку там, где это происходит: Ошибка задания
Я начал получать эту ошибку после установки июльского исправления безопасности 2018.
Поскольку я не могу поделиться всем кодом по причинам компании, вот часть, которая имеет значение:
function invokeUpdate{
param(
$session
)
if($Script:My.Reboot.isChecked){
$job = Invoke-Command -Session $session -ScriptBlock {Import-Module "C:ScriptsupdateModule$($Using:My.ModuleVersion)PSWindowsUpdate"; get-windowsupdate -install -AcceptAll} -AsJob
}else {
$job = Invoke-Command -Session $session -ScriptBlock {Import-Module "C:ScriptsupdateModule$($Using:My.ModuleVersion)PSWindowsUpdate"; get-windowsupdate -install -ignoreReboot -AcceptAll} -AsJob
}
return $job
}
function initSession{
param(
$serverHostname
)
$ses = New-PSSession -Computername $serverHostname
if(!(Invoke-Command -Session $ses -ScriptBlock {Test-Path "C:ScriptsupdateModule" })){
Copy-Item "$modpath$($Script:My.ModuleVersion)" -Destination "C:ScriptsupdateModule$($Script:My.ModuleVersion)" -ToSession $ses -Recurse
}
Invoke-Command -Session $ses -ScriptBlock {
if((Get-ChildItem -Path "C:ScriptsupdateModule").count -gt 1){
Get-ChildItem | Where-Object Name -NotLike "$($Using:My.ModuleVersion)" | Remove-Item -Recurse -Force
}
}
return $ses
}
$sessions = [System.Collections.ArrayList]@()
$Script:My.ModuleVersion = "2.1.1.2"
foreach ( $server in $Script:My.ServerActive.Items){
$sessions.Add( (initSession -serverHostname $server) )
}
foreach ($ses in $sessions){
invokeUpdate -session $ses
}
$Script:My.ServerActive.Товары :
содержит список полных доменных имен сервера
Любые идеи или решения спасли бы меня, спасибо!
Nik
Редактировать 1:
Вот сообщение об ошибке:
Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) CategoryInfo: не указано: (:) [Get-WindowsUpdate], исключение UnauthorizedAccessException FullyQualifiedErrorId : System.Исключение UnauthorizedAccessException,PSWindowsUpdate.GetWindowsUpdate PSComputerName: fs02.azubi.netz
Это приведет к прерыванию моих сеансов, но результат будет равен $ true ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
Вызов команды: не удается привязать параметр ‘Session’. Не удается преобразовать значение «True» в тип «System.Management.Автоматизация.Runspaces.PSSession». …
Комментарии:
1. Можете ли вы вставить вывод / ошибку в вопрос вместо ссылки на изображение ошибки?
2. Моя первая мысль здесь заключается в том, что ваш удаленный сеанс не запущен с повышенными разрешениями. Попробуйте запустить это от имени вашего пользователя DA в удаленной системе через PSRemoting, оно вернет,
$True
если у вас есть права администратора, а$False
если нет:([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")
. Если это проблема, ответьте, и у меня есть ответ, который должен решить эту проблему.
Ответ №1:
Чтобы устранить эту проблему, мне пришлось изменить способ копирования в другую систему и фактический вызов get-windowsupdate.
Moudle должен быть в $ env: PSModPath, поэтому, чтобы исправить это, вы должны скопировать в одну из этих папок.
Copy-Item "$modpath$($Script:My.ModuleVersion)" -Destination "$psmodPSWindowsUpdate$($Script:My.ModuleVersion)" -ToSession $ses -Recurse -ErrorAction Stop
обновление не нужно запускать с помощью команды Invoke.
Get-WindowsUpdate -AcceptAll -Install -IgnoreReboot -ComputerName $session.ComputerName
Надеюсь, это поможет, если у вас возникнет подобная проблема!