2015-05-04 2 views
0

Недавно у моей компании возникла проблема с нашими развертываниями SCCM из-за того, что репозиторий WMI стал поврежденным, и мы нашли статью в KB для решения этой проблемы, но нам нужно развернуть ее на 700+ системах, которые уже находятся в поле. Мы решили, что лучшим решением является развертывание статьи KB через GPO Powershell. Я изменил некоторые из приведенных ниже кодов, но когда работает объект групповой политики, он ничего не делает. Когда мы запускаем его автономно, он вызывает ошибку wusa, дающую возможность использовать wusa и терпит неудачу.Powershell; Network Share Развертывание MSU через GPO

Может кто-то протащить код и посмотреть, что мне не хватает, что привело к сбою?

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

Переменные

$ путь - directy сценарий был запущен из. \ имя_системы \ Sources \ Software \ WMI HotFix \

$ MSU - текущие окна udpate

$ обновление - массив имени файла пролитой '-'

$ kbart - текущее обновление KB имя

$ исправлений - возвращаемый результата при установленной проверке

$ команды - команда для установки обновления

$ пункта метров - команда плюс параметры к установке команды «\ тихо \ Norestart»

$ установки - процесс, чтобы начать установку

$ OS - Текущая версия ОС

$ папки - текущая папка под пути, содержит udpates.

kb2617858 \ win7 \ x64

kb2617858 \ win7 \ x86

Set-ExecutionPolicy RemoteSigned 

function Install-MSU($path) 
{  

# spilt file name to get KB artical number 
$update = $msu.Name -Split'-' 
$kbart = $update[1] 

# check if update is already installed 
$HotFix = Get-HotFix -id $kbart -ea 0 

# run if update is not installed 
if($HotFix -eq $null) 
    { 
    Write-Host "Installing $kbart" 
    $command = "`"" + "$path\$msu" + "`"" 
    $parameters = $command + " \quiet \norestart" 
    $install = [System.Diagnostics.Process]::Start("wusa",$parameters) 
    $install.WaitForExit() 
    } 

# run if update is installed 
else 
    { 
    Write-Host "Update $kbart installed" 
    } 
} 
} 
# set $path to network share directory location 
$path = "\\systemname\Sources\Software\HotFixes" 

# set $OS to current OS 
$OS = gwmi -query "select Caption, OSArchitecture from win32_OperatingSystem" 

# Win7 x86 or x64 
if($OS.Caption -match 'Windows 7') 
{ 
if($OS.OSArchitecture -match '64-bit') 
{ 
$folder = 'kb2617858\win7\x64' 
$path = "$path\$folder" 
Install-MSU($path) 
} 
else 
{ 
$folder = "kb2617858\win7\x86" 
$path = "$path\$folder" 
Install-MSU($path) 
} 
} 
else 
{ 

} 

Спасибо заранее !!

ответ

0
Set-ExecutionPolicy RemoteSigned 

function Install-MSU($path) { 
    # spilt file name to get KB artical number 
    $update = $msu.Name -Split'-' 
    $kbart = $update[1] 

    # check if update is already installed 
    $HotFix = Get-HotFix -id $kbart -ea 0 

    # run if update is not installed 
    if($HotFix -eq $null){ 
     Write-Host "Installing $kbart" 
     $command = "`"" + "$path\$msu" + "`"" 
     $parameters = $command + " \quiet \norestart" 
     $install = [System.Diagnostics.Process]::Start("wusa",$parameters) 
     $install.WaitForExit() 
    } else { 
    # run if update is installed 
     Write-Host "Update $kbart installed" 
    } 
} 

# set $path to network share directory location 
$path = "\\systemname\Sources\Software\HotFixes" 

# set $OS to current OS 
$OS = gwmi -query "select Caption, OSArchitecture from win32_OperatingSystem" 

# Win7 x86 or x64 
if($OS.Caption -match 'Windows 7'){ 
    if($OS.OSArchitecture -match '64-bit'){ 
     $folder = 'kb2617858\win7\x64' 
     $path = "$path\$folder" 
     Install-MSU($path) 
    } else { 
     $folder = "kb2617858\win7\x86" 
     $path = "$path\$folder" 
     Install-MSU($path) 
    } 
} 
+0

Натан, спасибо за ваш ответ. Однако при выполнении вашей пересмотренной версии я получаю следующую ошибку. Get-HotFix: не удается проверить аргумент в параметре «Id». Аргумент пустой или пустой. Поставьте аргумент t пустой или пустой, а затем повторите попытку. В C: \ Users \ username \ desktop \ deploy-kb2617858.ps1: 26 char: 29 + $ HotFix = Get-HotFix -id <<<< $ kbart -ea 0 + Категория: InvalidData: (:) [ Get-HotFix], ParameterBindingValidationException + FullyQualifiedErrorId: ПараметрArgumentValidationError, Microsoft.PowerShell.Commands.GetHotFixComman –

0

Я решил свою проблему. Я не заметил, что я использовал \ quiet и \ norestart, когда параметр должен быть/quiet и/norestart.

Ниже приводится окончательный сценарий, если кому-либо в будущем понадобится его.

Переменные

$ путь - directy сценарий был запущен из.\\ имя_системы \ Sources \ Software \ WMI HotFix \

$ MSU - текущие окна udpate

$ обновление - массив имени файла пролитой '-'

$ kbart - текущее обновление KB имя

$ исправлений - возвращаемый результата при установленной проверке

$ команды - команда для установки обновления

$ параметров - команды плюс параметров eters к команде установки '\ тихо \ Norestart'

$ установки - процесс, чтобы начать установку

$ OS - Текущая версия ОС

$ папка - текущая папка под пути, который содержит udpates.

kb2617858 \ win7 \ x64

kb2617858 \ win7 \ x86

Set-ExecutionPolicy RemoteSigned 

function Install-MSU($path) 
{  

# get updates in folders 
$msus = ls -Path $path *.msu -Recurse 

# loop through updates 
foreach ($msu in $msus) 
{ 

# spilt file name to get KB artical number 
$update = $msu.Name -Split'-' 
$kbart = $update[1] 

# check if update is already installed 
$HotFix = Get-HotFix -id $kbart -ea 0 

# run if update is not installed 
if($HotFix -eq $null) 
    { 
    Write-Host "Installing $kbart" 
    $command = "`"" + "$path\$msu" + "`"" 
    $parameters = $command + " /quiet /norestart" 
    $install = [System.Diagnostics.Process]::Start("wusa",$parameters) 
    $install.WaitForExit() 
    } 

# run if update is installed 
else 
    { 
    Write-Host "Update $kbart installed" 
    } 
    } 
} 

# set $path to network share directory location 
$path = "\\servername\Sources\Software\HotFixes" 

# set $OS to current OS 
$OS = gwmi -query "select Caption, OSArchitecture from win32_OperatingSystem" 

# if OS is windows 7 
if($OS.Caption -match 'Windows 7') 
{ 
if($OS.OSArchitecture -match '64-bit') 
{ 
$folder = 'kb2617858\win7\x64' 
$path = "$path\$folder" 
Install-MSU($path) 
} 
else 
{ 
$folder = "kb2617858\win7\x86" 
$path = "$path\$folder" 
Install-MSU($path) 
} 
} 
else 
{ 

} 
Смежные вопросы