Получите статус установки обновлений центра программного обеспечения от клиента sccm, используя powershell - PullRequest
0 голосов
/ 17 мая 2018

Я хочу получить в режиме реального времени статус всех исправлений, которые в настоящее время находятся в центре клиентского программного обеспечения SCCM. Я пытался использовать несколько скриптов, которые нашел в Интернете, но ни один из них не показал результаты в реальном времени. Я могу получить все доступные на данный момент обновления, а также соответствующие группы обновлений программного обеспечения, которые развертывают эти отсутствующие исправления, но еще не обнаружили, как связать отсутствующие исправления с их текущим состоянием, как это делает Software Center в настоящее время.

Функция, представленная ниже, в настоящее время работает и используется для установки отсутствующих исправлений.

Function Install-SCCMPatchesAvailable {
  [CmdletBinding()]
  param(
    [Parameter(
      Position = 0,
      Mandatory = $false,
      ValueFromPipelineByPropertyName = $true,
      HelpMessage = "Do not reboot server after patches install")]
    [ValidateNotNullOrEmpty()]
    [switch]
    $DoNotReboot
  )

  begin {
    Write-Verbose "Install-SCCMPatchesAvailable: Started"
  }

  process {
    try {
      ([wmiclass]'ROOT\ccm\ClientSDK:CCM_SoftwareUpdatesManager').InstallUpdates([System.Management.ManagementObject[]] `
        (Get-WmiObject -Query 'SELECT * FROM CCM_SoftwareUpdate' -namespace 'ROOT\ccm\ClientSDK'))

      while (-not((Get-WmiObject -Namespace 'ROOT\ccm\ClientSDK' -Class 'CCM_ClientUtilities' -list).DetermineIfRebootPending().RebootPending)) {
        $Time = (get-date).ToShortTimeString()
        Write-Output "Still Patching @ $Time"
        Start-Sleep -s 60
      }
      if (-not $PSBoundParameters.ContainsKey('DoNotReboot')) {
        if ((Get-WmiObject -Namespace 'ROOT\ccm\ClientSDK' -Class 'CCM_ClientUtilities' -list).DetermineIfRebootPending().RebootPending) {
          (Get-WmiObject -Namespace 'ROOT\ccm\ClientSDK' -Class 'CCM_ClientUtilities' -list).RestartComputer()
        }
      }
    }
    catch {
      Write-Error -Message "Something went wrong with Install-SCCMPatchesAvailable.`n`nError.Exception.Message : $($_.Exception.Message)`nError.Exception.FullName: $($_.Exception.GetType().FullName)"
    }
  }

  end {
    Write-Verbose "Install-SCCMPatchesAvailable: Completed"
  }
} #End Install-SCCMPatchesAvailable

Я хотел бы заменить:

$Time = (get-date).ToShortTimeString()
Write-Output "Still Patching @ $Time"
Start-Sleep -s 60

С чем-то, показывающим исправления, перечисленные в центре программного обеспечения sccm, и соответствующие им состояния исправлений (загрузка, установка, ожидание проверки, необходимость перезагрузки и т. Д.), Которые центр ПО показывает с помощью своего графического интерфейса.

Я также могу просматривать любые отсутствующие обновления с помощью написанного мной модуля, который возвращает один или несколько отсутствующих объектов исправлений. Однако Status для объекта может отображать только Missing или Installed. Не фактическое состояние патча SCCM. Пример:

SCCMPatchDeploymentName  : .MS_Server_Engineering_Patch_Testing - Post Basline OSs QAC 
                           Testing
ComputerName             : FSL04231
__GENUS                  : 2
__CLASS                  : CCM_UpdateStatus
__SUPERCLASS             : 
__DYNASTY                : CCM_UpdateStatus
__RELPATH                : CCM_UpdateStatus.UniqueId="5dc25e3e-31b9-4ac7-b1b7-a62a982139
                           0d"
__PROPERTY_COUNT         : 15
__DERIVATION             : {}
__SERVER                 : FSL04231
__NAMESPACE              : ROOT\ccm\SoftwareUpdates\UpdatesStore
__PATH                   : \\FSL04231\ROOT\ccm\SoftwareUpdates\UpdatesStore:CCM_UpdateSt
                           atus.UniqueId="5dc25e3e-31b9-4ac7-b1b7-a62a9821390d"
Article                  : 4088787
Bulletin                 : 
ExcludeForStateReporting : False
Language                 : 
ProductID                : 0fa1201d-4330-4fa8-8ae9-b877473b6441
RevisionNumber           : 202
ScanTime                 : 20180516214114.000000+000
Sources                  : {{7D052A75-2032-4F02-BAC9-9EDA4DBD58DE}}
SourceType               : 2
SourceUniqueId           : {7D052A75-2032-4F02-BAC9-9EDA4DBD58DE}
SourceVersion            : 82
Status                   : Missing
Title                    : 2018-03 Cumulative Update for Windows Server 2016 for 
                           x64-based Systems (KB4088787)
UniqueId                 : 5dc25e3e-31b9-4ac7-b1b7-a62a9821390d
UpdateClassification     : 0fa1201d-4330-4fa8-8ae9-b877473b6441
PSComputerName           : FSL04231

1 Ответ

0 голосов
/ 20 мая 2018

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

...