Libraries/OS.WindowsServer/OS.WindowsServer.psm1

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
125
126
127
128
129
130
131
132
133
134
135
136
137
<#
.SYNOPSIS
Get the release ID of an OS
 
.DESCRIPTION
Windows Server (since Windows 10 / 2016) use the same ReleaseId as Windows Client.
But to differentiate Servers from Clients, we will use the old "year" number like "2008", "2012r2"
 
.PARAMETER Online
True to specify to fetch information from the running OS
 
.PARAMETER Root
The path to the root of an OS.
 
.EXAMPLE
Get-OSReleaseId -Online
 
.EXAMPLE
Get-OSReleaseId -Root F:\
 
.NOTES
General notes
#>


function Get-OSReleaseId {
    [CmdletBinding()][OutputType([String])]Param (
        [Parameter(ParameterSetName = 'ONLINE')][switch]$Online,
        [Parameter(ParameterSetName = 'ROOT')][string]$Root
    )
    Begin {
        Write-EnterFunction
    }

    Process {
        switch ($PSCmdlet.ParameterSetName) {
            'ONLINE' {
                $CurrentVersion = Get-OSVersion -Online
                $CurrentBuild = Get-OSKernelVersion -Online
                $releaseId = OS.WinNT\Get-OSReleaseId -Online
                break
            }
            'ROOT' {
                $CurrentVersion = Get-OSVersion -Root $Root
                $CurrentBuild = Get-OSKernelVersion -Root $Root
                $releaseId = OS.WinNT\Get-OSReleaseId -Root $Root
                break
            }
        }

        switch ($CurrentVersion) {
            "5.0" {
                $releaseId = "2000"
            }
            "5.1" {
                $releaseId = "2003"
            }
            "5.2" {
                $releaseId = "2003r2"
            }
            "6.0" {
                switch ($CurrentBuild) {
                    "6000" {
                        $releaseId = "2008"
                        break
                    }
                    "6001" {
                        $releaseId = "2008sp1"
                        break
                    }
                    "6002" {
                        $releaseId = "2008sp2"
                        break
                    }
                }
            }
            "6.1" {
                switch ($CurrentBuild) {
                    "7600" {
                        $releaseId = "2008r2"
                        break
                    }
                    "7001" {
                        $releaseId = "2008r2sp1"
                        break
                    }
                }
            }
            "6.2" {
                switch ($CurrentBuild) {
                    "9200" {
                        $releaseId = "2012"
                        break
                    }
                }
            }
            "6.3" {
                switch ($CurrentBuild) {
                    # * Windows 8
                    "9300" {
                        $releaseId = "2012r2"
                        break
                    }
                    # * Windows 8.1
                    "9600" {
                        $releaseId = "2012r2sp1"
                        break
                    }
                    # * Windows 10
                    # "10240", etc...
                    default {
                        switch ($ReleaseId) {
                            '1607' {
                                $releaseId = "2016"
                            }
                            '1809' {
                                $releaseId = "2019"
                            }
                            '2009' {
                                $releaseId = "2022"
                            }
                        }
                        break
                    }
                }
            }
        }

        # return $Distrib + "." + $ReleaseId.replace('.','')
        return "$ReleaseId"
   }

    End {
        Write-LeaveFunction
    }
}