Scripts/Get-PCOperatingSystem.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
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 {}

}