اسکریپت PowerShell برای بررسی وضعیت Windows Update

معمولاً، کاربرانی که می خواهند بدانند آیا آخرین به روز رسانی تجمعی در سیستم ویندوز 10 آنها نصب شده است یا خیر، از این روش برای بررسی تاریخچه به روز رسانی ویندوز 10 استفاده می کنند. در این پست به شما نشان خواهیم داد که چگونه با استفاده از یک اسکریپت PowerShell اطلاعات پچ فعلی ویندوز 10 را دریافت کنید.(how to get current patch information for Windows 10 using a PowerShell script.)

اسکریپت PowerShell برای بررسی وضعیت Windows Update

(PowerShell)اسکریپت PowerShell برای بررسی وضعیت Windows Update

از اسکریپت PowerShell می توان برای گزارش سیستم عاملی که یک رایانه ویندوز 10(Windows 10) در حال حاضر روی آن استفاده می شود و همچنین اینکه کدام به روز رسانی آخرین به روز رسانی موجود برای دستگاه است، استفاده می شود. همچنین می‌تواند در مورد تمام به‌روزرسانی‌های ویندوز(Windows) منتشر شده برای نسخه ویندوز 10(Windows 10) که ایستگاه کاری در حال حاضر روی آن است، گزارش دهد.

هنگامی که اسکریپت را اجرا می کنید، اطلاعات زیر نمایش داده می شود:

  • نسخه فعلی سیستم عامل
  • نسخه فعلی سیستم عامل
  • شماره ساخت سیستم عامل فعلی
  • به‌روزرسانی نصب‌شده مربوط به آن شماره ساخت و همچنین شماره KB و پیوندی به صفحه اطلاعات
  • آخرین به روز رسانی موجود برای نسخه سیستم عامل

برای دریافت اطلاعات وصله فعلی ویندوز 10 با استفاده از اسکریپت (Windows 10)PowerShell ، باید اسکریپت PowerShell را با استفاده از کد زیر از Github ایجاد و اجرا(create and run the PowerShell script) کنید .

[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) را که مایکروسافت(Microsoft) برای نسخه سیستم‌عامل شما منتشر کرده است با دستور زیر فهرست کنید:

Get-CurrentPatchInfo -ListAvailable

اگر می‌خواهید به‌روزرسانی‌های پیش‌نمایش(Preview) و خارج از باند(Out-of-band) را از لیست حذف کنید، اما همه به‌روزرسانی‌های ویندوز را که (Windows)مایکروسافت(Microsoft) برای نسخه سیستم عامل شما منتشر کرده است فهرست کنید، دستور زیر را اجرا کنید:

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

خودشه!

در ادامه بخوانید(Read next) : سایت مرورگر ماژول PowerShell(PowerShell Module Browser site) به شما امکان می دهد cmdlet ها و بسته ها را جستجو کنید.



About the author

من یک بازبین نرم افزار و مهندس بی سیم با بیش از 10 سال تجربه در این زمینه هستم. من در بررسی برنامه ها و نرم افزارهای تلفن همراه و همچنین کمک به مشتریان برای بهینه سازی شبکه های خود تخصص دارم. از طریق بررسی‌هایم، می‌توانم به شما در تصمیم‌گیری آگاهانه درباره محصولاتی که باید استفاده کنید، نحوه بهبود گردش کار و موارد دیگر کمک کنید. مهارت های من عبارتند از: ارتباط کتبی و شفاهی عالی، حل مسئله، دانش فنی قوی و توجه به جزئیات. من همچنین در کار مستقل و همکاری در پروژه ها مهارت دارم.



Related posts