Я хочу получить в режиме реального времени статус всех исправлений, которые в настоящее время находятся в центре клиентского программного обеспечения 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