Files
classity e1d6cd8c6e Update Get-WinUpdates.ps1
removed debugging line,
2018-03-23 09:28:20 +01:00

63 lines
3.1 KiB
PowerShell

Function Get-WinUpdates
{
<#
.SYNOPSIS
Get-WinUpdates gets a list of Windows and Microsoft Updates installed on the computer.
.DESCRIPTION
Get-WinUpdates gets a list of Windows and Microsoft Updates installed on the computer. Requires administrative level access.
.PARAMETER ComputerName
A description of the ComputerName parameter.
.EXAMPLE
Get-WinUpdates -ComputerName "localhost"
.EXAMPLE
Get-Content computers.txt | Get-WinUpdates | Format-Table PC,Date,Operation,Status,Title,KB,PC -Wrap -auto
.NOTES
Get-WinUpdates gets a list of Windows and Microsoft Updates installed on the computer.
Based on Get-InstalledUpdates https://github.com/Kreloc
M.Hartsuijker - Classity - Modified to include pending updates
#>
[CmdletBinding()]
Param (
[Parameter(position=0,Mandatory = $False,ValueFromPipeline =
$true,ValueFromPipelinebyPropertyName=$true)][Alias('Name')]
$ComputerName = $env:computername
)
Begin
{
function Test-ElevatedShell
{
$user = [Security.Principal.WindowsIdentity]::GetCurrent()
(New-Object Security.Principal.WindowsPrincipal $user).IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)
}
$admin = Test-ElevatedShell
}
PROCESS
{
If($admin)
{
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.Update.Session') | Out-Null
$Session = [activator]::CreateInstance([type]::GetTypeFromProgID("Microsoft.Update.Session",$ComputerName))
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
$Searcher.QueryHistory(0, $historyCount) | Select-Object Date,
@{name="Operation"; expression={switch($_.operation){
1 {"Installation"}; 2 {"Uninstallation"}; 3 {"Other"}}}},
@{name="Status"; expression={switch($_.resultcode){
0 {"Not started"}; 1 {"In Progress"}; 2 {"Succeeded"}; 3 {"Succeeded With Errors"};
4 {"Failed"}; 5 {"Aborted"}
}}}, Title,@{name="KB"; expression={($_.title -split "(KB*.*)")[1]}},@{name="PC";expression={$ComputerName}}
$Updates = @($Searcher.Search("IsHidden=0 and IsInstalled=0").Updates)
$Updates | Select-Object @{name="Date";expression={"Blank"}},@{name="Operation";expression={"Other"}},@{name="Status";expression={"Pending"}},Title,@{name="PC";expression={$ComputerName}}
}
else
{
"Please re-load this function in a Run as Administrator PowerShell console."
}
}
}