Powershell to find Server Operating system

前端 未结 2 1814
半阙折子戏
半阙折子戏 2020-12-21 05:36

I had a task to find Operating System of all the servers we had in AD for some Microsoft Licenses requirement.

Has anyone done this?

相关标签:
2条回答
  • 2020-12-21 06:18
    $OSIs64BitArch = ([System.Environment]::Is64BitOperatingSystem)
    $OSArchString = if ( $OSIs64BitArch ) {"x64"} else {"x86"}
    $OSIsServerVersion = if ([Int]3 -eq [Int](Get-WmiObject -Class Win32_OperatingSystem).ProductType) {$True} else {$False}
    $OSVerObjectCurrent = [System.Environment]::OSVersion.Version
    if ($OSVerObjectCurrent -ge (New-Object -TypeName System.Version -ArgumentList "6.1.0.0")) {
        if ($OSVerObjectCurrent -ge (New-Object -TypeName System.Version -ArgumentList "6.2.0.0")) {
            if ($OSVerObjectCurrent -ge (New-Object -TypeName System.Version -ArgumentList "6.3.0.0")) {
                if ($OSVerObjectCurrent -ge (New-Object -TypeName System.Version -ArgumentList "10.0.0.0")) {
                    if ( $OSIsServerVersion ) {
                        Write-Output ('Windows Server 2016 ' + $OSArchString + " ... OR Above")
                    } else {
                        Write-Output ('Windows 10 ' + $OSArchString + " ... OR Above")
                    }
                } else {
                    if ( $OSIsServerVersion ) {
                        Write-Output ('Windows Server 2012 R2 ' + $OSArchString)
                    } else {
                        Write-Output ('Windows 8.1 ' + $OSArchString)
                    }
                }
            } else {
                if ( $OSIsServerVersion ) {
                    Write-Output ('Windows Server 2012 ' + $OSArchString)
                } else {
                    Write-Output ('Windows 8 ' + $OSArchString)
                }
            }
        } else {
            if ( $OSIsServerVersion ) {
                Write-Output ('Windows Server 2008 R2 ' + $OSArchString)
            } else {
                Write-Output ('Windows 7 OR Windows 7-7601 SP1' + $OSArchString)
            }
        }
    } else {
        Write-Output ('This version of Windows is not supported.')
    }
    
    0 讨论(0)
  • 2020-12-21 06:19

    I figured it out.

    Please feel free to use it and modify it. If you have questions, let me know.

    It's a simple command. Hopefully, it helps someone. This gives you the type of operating systems you have. I am filtering based on Windows Server only and computer accounts that are active. Then sort by name and select unique OS.

    Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} -Properties OperatingSystem | Sort Name | select -Unique OperatingSystem
    

    Output:

    OperatingSystem
    ---------------
    Windows Server 2012 R2 Standard
    Windows Server 2008 R2 Standard
    Windows Server 2012 R2 Standard Evaluation
    Windows Server 2008 R2 Enterprise
    

    Next command is to get all the servers and show their Operating System. Again, I am filtering based on Windows server OS and Active computer accounts. I am sorting my list by Operating system:

    Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} -Properties OperatingSystem | sort OperatingSystem | ft DNSHostName, OperatingSystem
    

    You can also save the above in a variable and then get the count of Servers in each operating system category:

    $Servers = Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (Enabled -eq "True")} -Properties OperatingSystem | Sort Name
    
    $servers | group operatingsystem  
    
    0 讨论(0)
提交回复
热议问题