Public/Get-ImmyComputerWindowsVersion.ps1
Function Get-ImmyComputerWindowsVersion { <# .SYNOPSIS Gets Windows version information for a computer from ImmyBot .DESCRIPTION Extracts Windows version, build number, and architecture information from the WindowsSystemInfo inventory data .EXAMPLE Get-ImmyComputerWindowsVersion -ComputerId 6658 Gets Windows version information for computer with ID 6658 .EXAMPLE Get-ImmyComputerWindowsVersion -ComputerId 6658 -Detailed Gets detailed Windows system information including additional fields .PARAMETER ComputerId The ID of the computer to get Windows version information for .PARAMETER Detailed Include additional system information like manufacturer, model, domain, etc. .INPUTS None .OUTPUTS PSCustomObject containing Windows version information .NOTES Requires SPSImmyBot module and valid authentication Uses WindowsSystemInfo inventory data from ImmyBot .LINK #> [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true)] [int]$ComputerId, [switch]$Detailed ) Begin { Write-Verbose -Message "Starting $($MyInvocation.InvocationName)..." } Process { try { Write-Verbose "Getting Windows version information for computer ID: $ComputerId" # Get computer details with inventory $computer = Get-ImmyComputerDetails -ComputerId $ComputerId if (-not $computer) { throw "Computer with ID $ComputerId not found" } # Extract Windows system info $windowsInfo = $computer.inventory.WindowsSystemInfo.Output if (-not $windowsInfo) { throw "WindowsSystemInfo inventory data not available for computer $ComputerId" } # Create basic version object $versionInfo = [PSCustomObject]@{ ComputerId = $ComputerId ComputerName = $computer.computerName OsName = $windowsInfo.OsName Version = $windowsInfo.Version Architecture = $windowsInfo.Architecture LastBootTime = $windowsInfo.LastBootTime OsInstallDate = $windowsInfo.OsInstallDate } # Add detailed information if requested if ($Detailed) { $versionInfo | Add-Member -NotePropertyName 'Manufacturer' -NotePropertyValue $windowsInfo.Manufacturer $versionInfo | Add-Member -NotePropertyName 'Model' -NotePropertyValue $windowsInfo.Model $versionInfo | Add-Member -NotePropertyName 'SerialNumber' -NotePropertyValue $windowsInfo.SerialNumber $versionInfo | Add-Member -NotePropertyName 'Domain' -NotePropertyValue $windowsInfo.Domain $versionInfo | Add-Member -NotePropertyName 'CPU' -NotePropertyValue $windowsInfo.CPU $versionInfo | Add-Member -NotePropertyName 'CPUCount' -NotePropertyValue $windowsInfo.CPUCount $versionInfo | Add-Member -NotePropertyName 'TimeZone' -NotePropertyValue $windowsInfo.TimeZone $versionInfo | Add-Member -NotePropertyName 'TPMVersion' -NotePropertyValue $windowsInfo.TPMVersion $versionInfo | Add-Member -NotePropertyName 'HyperVHost' -NotePropertyValue $windowsInfo.HyperVHost $versionInfo | Add-Member -NotePropertyName 'PSVersion' -NotePropertyValue $windowsInfo.PSVersion } return $versionInfo } catch { Write-Error -Message "Failed to get Windows version information for computer $ComputerId`: $_" throw } } End { Write-Verbose -Message "Ending $($MyInvocation.InvocationName)..." } } |