برنامج PowerShell النصي للتحقق من حالة Windows Update

عادةً ما يستخدم المستخدمون الذين يرغبون في معرفة ما إذا كان آخر تحديث تراكمي مثبتًا على نظام Windows 10 الخاص بهم هذه الطريقة للتحقق من محفوظات تحديث Windows 10 . في هذا المنشور ، سنوضح لك كيفية الحصول على معلومات التصحيح الحالية لنظام التشغيل Windows 10 باستخدام برنامج PowerShell النصي.(how to get current patch information for Windows 10 using a PowerShell script.)

برنامج PowerShell النصي للتحقق من حالة Windows Update

برنامج PowerShell(PowerShell) النصي للتحقق من حالة Windows Update

يمكن استخدام البرنامج النصي PowerShell للإبلاغ عن نظام التشغيل الذي يقوم بإنشاء جهاز كمبيوتر يعمل بنظام Windows 10(Windows 10) والذي يعمل حاليًا بالإضافة إلى التحديث الأخير المتاح للجهاز. يمكنه أيضًا الإبلاغ عن جميع تحديثات Windows المنشورة لإصدار Windows 10 ، حيث تكون محطة العمل قيد التشغيل حاليًا.

عند تشغيل البرنامج النصي ، سيتم عرض المعلومات التالية:

  • إصدار نظام التشغيل الحالي
  • إصدار نظام التشغيل الحالي
  • رقم إصدار نظام التشغيل الحالي
  • التحديث المثبت الذي يتوافق مع رقم الإصدار هذا ، بالإضافة إلى رقم قاعدة المعارف ورابط لصفحة المعلومات
  • آخر تحديث متوفر لإصدار نظام التشغيل

للحصول على معلومات التصحيح الحالية لنظام التشغيل Windows 10 باستخدام برنامج (Windows 10)PowerShell النصي ، تحتاج إلى إنشاء برنامج PowerShell النصي وتشغيله(create and run the PowerShell script) باستخدام الكود أدناه من Github .

[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

يمكنك استبعاد معاينة(Preview) أو تحديثات خارج النطاق(Out-of-band) المتوفرة الأحدث من التحديث الذي قمت بتثبيته من الإبلاغ عن آخر تحديث متوفر ، بحيث يمكنك التركيز فقط على التحديثات التراكمية عن طريق تشغيل الأمر أدناه:

Get-CurrentPatchInfo -ExcludePreview -ExcludeOutofBand

يمكنك أيضًا سرد كافة تحديثات Windows التي نشرتها (Windows)Microsoft لإصدار نظام التشغيل لديك باستخدام الأمر التالي:

Get-CurrentPatchInfo -ListAvailable

إذا كنت ترغب في استبعاد المعاينة(Preview) والتحديثات خارج النطاق(Out-of-band) من القائمة ولكن مع إدراج جميع تحديثات Windows التي نشرتها (Windows)Microsoft لإصدار نظام التشغيل الخاص بك ، فقم بتشغيل الأمر أدناه:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

هذا هو!

اقرأ التالي(Read next) : يتيح لك موقع PowerShell Module Browser(PowerShell Module Browser site) البحث عن أوامر cmdlets والحزم.



About the author

أهلاً! أنا مبرمج كمبيوتر بخبرة تزيد عن 10 سنوات في هذا المجال. أنا متخصص في تطوير وصيانة البرامج للهواتف الذكية وتحديثات Windows. بالإضافة إلى ذلك ، أقدم خدماتي كممثل شهري لدعم عملاء البريد الإلكتروني.



Related posts