Scripts/Get-PCOperatingSystem.ps1
Function Get-PCOperatingSystem { <# .SYNOPSIS Get operating system information .DESCRIPTION Get operating system information .PARAMETER ComputerName The target computer name .EXAMPLE Get-PCOperatingSystem -ComputerName LabPC2024 .NOTES N/A .LINK N/A #> [CmdletBinding ()] Param ( [Parameter (Mandatory = $True, ValueFromPipeline = $True, ValueFromPipelineByPropertyName = $True, HelpMessage = 'Enter computer name' ) ] [String[]]$ComputerName ) BEGIN { Function Show-Output ($Computer, $Values, $Status) { If ($Values.InstallDate -or $Values.LastBootupTime) { [Object]$InstallDate = [System.Management.ManagementDateTimeConverter]::ToDateTime($Values.InstallDate).ToUniversalTime() [Object]$LastBootupTime = [System.Management.ManagementDateTimeConverter]::ToDateTime($Values.LastBootupTime).ToUniversalTime() } [PSCustomObject]@{ ComputerName = $Computer Caption = $Values.Caption Description = $Values.Description Version = $Values.Version BuildNumber = $Values.BuildNumber BuildType = $Values.BuildType OSArchitecture = $Values.OSArchitecture Manufacturer = $Values.Manufacturer SystemDrive = $Values.SystemDrive WindowsDirectory = $Values.WindowsDirectory ServicePackMajorVersion = $Values.ServicePackMajorVersion ServicePackMinorVersion = $Values.ServicePackMinorVersion RegisteredUser = $Values.RegisteredUser Organization = $Values.Organization FreePhysicalMemory = $Values.FreePhysicalMemory FreeSpaceInPagingFiles = $Values.FreeSpaceInPagingFiles FreeVirtualMemory = $Values.FreeVirtualMemory TotalVirtualMemorySize = $Values.TotalVirtualMemorySize TotalVisibleMemorySize = $Values.TotalVisibleMemorySize InstallDate = $InstallDate LastBootupTime = $LastBootupTime PortableOperatingSystem = $Values.PortableOperatingSystem Primary = $Values.Primary MaxNumberOfProcesses = $Values.MaxNumberOfProcesses MaxProcessMemorySize = $Values.MaxProcessMemorySize Status = $Status } } } PROCESS { ForEach ($Computer In $ComputerName) { If (Test-Connection -ComputerName $Computer -Count 1 -Quiet) { Try { $Data = Get-WmiObject Win32_OperatingSystem -ComputerName $Computer | Select-Object * ForEach ($Item In $Data) { Show-Output $Computer.ToUpper() $Item 'Ok' } } Catch { Show-Output $Computer.ToUpper() $Null $PSItem.Exception.Message } } Else { Show-Output $Computer.ToUpper() $Null 'Unreachable' } } } END {} } |