Windows 업데이트 상태를 확인하는 PowerShell 스크립트

일반적으로 Windows 10 시스템에 최신 누적 업데이트가 설치되어 있는지 확인하려는 사용자는 이 방법을 사용 하여 Windows 10 업데이트 기록 을 확인합니다 . 이 게시물에서는 PowerShell 스크립트를 사용하여 Windows 10에 대한 최신 패치 정보를 얻는 방법을 보여줍니다.(how to get current patch information for Windows 10 using a PowerShell script.)

Windows 업데이트 상태를 확인하는 PowerShell 스크립트

(PowerShell)Windows 업데이트(Windows Update) 상태 를 확인하는 PowerShell 스크립트

PowerShell 스크립트를 사용하여 현재 Windows 10 컴퓨터를 빌드하는 OS 와 장치에 사용할 수 있는 최신 업데이트를 보고할 수 있습니다. 또한 워크스테이션이 현재 사용 중인 Windows 10 버전에 대해 게시된 모든 Windows 업데이트 에 대해 보고할 수 있습니다.

스크립트를 실행하면 다음 정보가 표시됩니다.

  • 현재 OS 버전
  • 현재 OS 에디션
  • 현재 OS 빌드 번호
  • 해당 빌드 번호, KB 번호 및 정보 페이지 링크에 해당하는 설치된 업데이트
  • OS 버전에 대해 사용 가능한 최신 업데이트

PowerShell 스크립트를 사용하여 Windows 10 최신 패치 정보 를 얻으려면 Github 에서 아래 코드를 사용하여 PowerShell 스크립트를 만들고 실행(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

다음 명령을 사용하여 Microsoft 에서 OS 버전에 대해 게시한 모든 (Microsoft)Windows 업데이트를 나열할 수도 있습니다 .

Get-CurrentPatchInfo -ListAvailable

목록에서 미리 보기(Preview)대역 외(Out-of-band) 업데이트 를 제외 하고 Microsoft 가 OS 버전에 대해 게시한 모든 Windows 업데이트를 나열 하려면 아래 명령을 실행하십시오.

Get-CurrentPatchInfo -ListAvailable -ExcludePreview -ExcludeOutofBand

그게 다야!

다음 읽기(Read next) : PowerShell 모듈 브라우저 사이트(PowerShell Module Browser site) 에서 cmdlet 및 패키지를 검색할 수 있습니다.



About the author

저는 10년 이상의 경험을 가진 웹 개발자이자 오디오 엔지니어입니다. 저는 Chrome/Web Audio 앱과 Discord 애플리케이션 개발을 전문으로 합니다. 두 분야의 기술을 통해 사용하고 유지 관리하기 쉬운 고품질 제품을 만들 수 있습니다. 또한 저는 Discord의 숙련된 사용자이며 현재 2년 이상 앱 작업을 하고 있습니다.



Related posts