Windows Update durumunu kontrol etmek için PowerShell betiği

Genellikle, Windows 10 sistemlerinde en son toplu güncellemenin yüklü olup olmadığını öğrenmek isteyen kullanıcılar , Windows 10 Güncelleme Geçmişini kontrol etmek için bu yöntemi kullanır . Bu gönderide, bir PowerShell betiği kullanarak Windows 10 için güncel yama bilgilerini nasıl(how to get current patch information for Windows 10 using a PowerShell script.) alacağınızı göstereceğiz .

Windows Update durumunu kontrol etmek için PowerShell betiği

(PowerShell)Windows Update durumunu kontrol etmek için PowerShell betiği

PowerShell betiği, şu anda hangi işletim sisteminin bir Windows 10(Windows 10) bilgisayarı oluşturduğunu ve hangi güncellemenin cihaz için mevcut olan en son güncelleme olduğunu bildirmek için kullanılabilir. Ayrıca, bir iş istasyonunun şu anda üzerinde olduğu Windows 10 sürümü için yayınlanan tüm (Windows 10)Windows güncellemelerini de raporlayabilir .

Komut dosyasını çalıştırdığınızda, aşağıdaki bilgiler görüntülenecektir:

  • Mevcut işletim sistemi sürümü
  • Mevcut İşletim Sistemi Sürümü
  • Mevcut İşletim Sistemi Yapı numarası
  • Bu yapı numarasına karşılık gelen yüklü güncelleme, ayrıca KB numarası ve bilgi sayfasına bir bağlantı
  • İşletim sistemi sürümü için mevcut en son güncelleme

PowerShell betiğini kullanarak Windows 10(Windows 10) güncel yama bilgilerini almak için , Github'dan(Github) aşağıdaki kodu kullanarak PowerShell betiğini oluşturup çalıştırmanız(create and run the PowerShell script) gerekir .

[CmdletBinding()]
Param(
[switch]$ListAllAvailable,
[switch]$ExcludePreview,
[switch]$ExcludeOutofBand
)
$ProgressPreference = 'SilentlyContinue'
$URI = "https://aka.ms/WindowsUpdateHistory" # Windows 10 release history

Function Get-MyWindowsVersion {
[CmdletBinding()]
Param
(
$ComputerName = $env:COMPUTERNAME
)

$Table = New-Object System.Data.DataTable
$Table.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
$ProductName = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ProductName).ProductName
Try
{
$Version = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name ReleaseID -ErrorAction Stop).ReleaseID
}
Catch
{
$Version = "N/A"
}
$CurrentBuild = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name CurrentBuild).CurrentBuild
$UBR = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' -Name UBR).UBR
$OSVersion = $CurrentBuild + "." + $UBR
$TempTable = New-Object System.Data.DataTable
$TempTable.Columns.AddRange(@("ComputerName","Windows Edition","Version","OS Build"))
[void]$TempTable.Rows.Add($env:COMPUTERNAME,$ProductName,$Version,$OSVersion)

Return $TempTable
}

Function Convert-ParsedArray {
Param($Array)

$ArrayList = New-Object System.Collections.ArrayList
foreach ($item in $Array)
{ 
[void]$ArrayList.Add([PSCustomObject]@{
Update = $item.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - ')
KB = "KB" + $item.href.Split('/')[-1]
InfoURL = "https://support.microsoft.com" + $item.href
OSBuild = $item.outerHTML.Split('(OS ')[1].Split()[1] # Just for sorting
})
}
Return $ArrayList
}

If ($PSVersionTable.PSVersion.Major -ge 6)
{
$Response = Invoke-WebRequest -Uri $URI -ErrorAction Stop
}
else 
{
$Response = Invoke-WebRequest -Uri $URI -UseBasicParsing -ErrorAction Stop
}

If (!($Response.Links))
{ throw "Response was not parsed as HTML"}
$VersionDataRaw = $Response.Links | where {$_.outerHTML -match "supLeftNavLink" -and $_.outerHTML -match "KB"}
$CurrentWindowsVersion = Get-MyWindowsVersion -ErrorAction Stop

If ($ListAllAvailable)
{
If ($ExcludePreview -and $ExcludeOutofBand)
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview" -and $_.outerHTML -notmatch "Out-of-band"}
}
ElseIf ($ExcludePreview)
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview"}
}
ElseIf ($ExcludeOutofBand)
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band"}
}
Else
{
$AllAvailable = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0]}
}
$UniqueList = (Convert-ParsedArray -Array $AllAvailable) | Sort OSBuild -Descending -Unique
$Table = New-Object System.Data.DataTable
[void]$Table.Columns.AddRange(@('Update','KB','InfoURL'))
foreach ($Update in $UniqueList)
{
[void]$Table.Rows.Add(
$Update.Update,
$Update.KB,
$Update.InfoURL
)
}
Return $Table
}

$CurrentPatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'} | Select -First 1
If ($ExcludePreview -and $ExcludeOutofBand)
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band" -and $_.outerHTML -notmatch "Preview"} | Select -First 1
}
ElseIf ($ExcludePreview)
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Preview"} | Select -First 1
}
ElseIf ($ExcludeOutofBand)
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0] -and $_.outerHTML -notmatch "Out-of-band"} | Select -First 1
}
Else
{
$LatestAvailablePatch = $VersionDataRaw | where {$_.outerHTML -match $CurrentWindowsVersion.'OS Build'.Split('.')[0]} | Select -First 1
}


$Table = New-Object System.Data.DataTable
[void]$Table.Columns.AddRange(@('OSVersion','OSEdition','OSBuild','CurrentInstalledUpdate','CurrentInstalledUpdateKB','CurrentInstalledUpdateInfoURL','LatestAvailableUpdate','LastestAvailableUpdateKB','LastestAvailableUpdateInfoURL'))
[void]$Table.Rows.Add(
$CurrentWindowsVersion.Version,
$CurrentWindowsVersion.'Windows Edition',
$CurrentWindowsVersion.'OS Build',
$CurrentPatch.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - '),
"KB" + $CurrentPatch.href.Split('/')[-1],
"https://support.microsoft.com" + $CurrentPatch.href,
$LatestAvailablePatch.outerHTML.Split('>')[1].Replace('</a','').Replace('—',' - '),
"KB" + $LatestAvailablePatch.href.Split('/')[-1],
"https://support.microsoft.com" + $LatestAvailablePatch.href
)
Return $Table

Yüklemiş olduğunuzdan daha yeni olan Önizleme(Preview) veya Bant Dışı güncellemelerin mevcut en son güncelleme olarak rapor edilmesini engelleyebilirsiniz, böylece aşağıdaki komutu çalıştırarak yalnızca toplu güncellemelere odaklanabilirsiniz:(Out-of-band)

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

Microsoft'un(Microsoft) işletim sistemi sürümünüz için yayınladığı tüm Windows güncellemelerini aşağıdaki komutla da listeleyebilirsiniz:

Get-CurrentPatchInfo -ListAvailable

Önizleme(Preview) ve Bant Dışı(Out-of-band) güncellemeleri listeden hariç tutmak , ancak Microsoft'un işletim sistemi sürümünüz için yayınladığı tüm (Microsoft)Windows güncellemelerini listelemek istiyorsanız aşağıdaki komutu çalıştırın:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

Bu kadar!

PowerShell (Read next)Modül Tarayıcı sitesi(PowerShell Module Browser site) , cmdlet'leri ve paketleri aramanıza olanak tanır.



About the author

Merhaba! Alanında 10 yılı aşkın deneyime sahip bir bilgisayar programcısıyım. Akıllı telefonlar ve Windows güncellemeleri için yazılım geliştirme ve bakımı konusunda uzmanım. Ek olarak, hizmetlerimi aylık e-posta müşteri destek temsilcisi olarak sunuyorum.



Related posts