Public/Get-NTSystemInfo.ps1

<#
    .SYNOPSIS
        To gather and instantiate the servers details
     
    .DESCRIPTION
        Capsulizing WMI queries to gather and propagate new objects for output for queried servers
     
    .PARAMETER ComputerName
        Computer Name of the Server you would like to connect to.
     
    .EXAMPLE
        PS C:\> Get-NTServerDetails -ComputerName 'Value1'
     
    .NOTES
        Created by Nigel Tatschner 2015.
#>

function Get-NTSystemInfo
{
    [CmdletBinding()]
    [OutputType([Object])]
    param
    (
        [Parameter(Mandatory = $true,
                   ValueFromPipeline = $true,
                   ValueFromPipelineByPropertyName = $true,
                   HelpMessage = 'Enter the Name of the Server you would like to connect to.')]
        [Alias('ServerName')]
        [string]$ComputerName
    )
    
    Begin
    {
        try
        {
            Write-Verbose "Testing Connection to Server $ComputerName"
            Test-Connection -ComputerName $ComputerName -ErrorAction Stop | Out-Null
            Write-Verbose "Connection to $($ComputerName) was successfully, moving on to wmi queries"
        }
        Catch
        {
            Write-Verbose "Could not connect to $ComputerName"
            Write-Error -Message "Could not connect to $($ComputerName)" -Category ConnectionError -RecommendedAction 'Check if the computer name is correct and it is on.'
            Continue
        }

    }
    Process
    {
        try
        {
            Write-Verbose 'Getting Computer System details'
            $ComputerSystemDetails = Get-WmiObject -ComputerName $ComputerName -Class Win32_ComputerSystem -ErrorAction Stop
            Write-Verbose 'Computer System Details Gathered.'
        }
        catch [System.UnauthorizedAccessException]
        {
            Write-Verbose "Could not connect to $($ComputerName) via WMI - Access Denied"
            Write-Error -Message "Access Denied - Could not access computer system details from $ComputerName via WMI" -Category AuthenticationError -RecommendedAction 'Check if the user has access.'
            return
        }
        catch [Exception]
        {
            if ($_.Exception.GetType().Name -eq "COMException")
            {
                Write-Verbose "Could not connect to $($ComputerName) via WMI - Connectivity Issues"
                Write-Error -Message "Connectivity Issues - Could not access computer system details from $($ComputerName) via WMI" -Category ConnectionError -RecommendedAction 'Check if the computer name is correct and the firewall is off.'
                return
            }
            else
            {
                Write-Verbose "Could not connect to $($ComputerName) via WMI - Unknown Error"
                Write-Error -Message "Unknown Error - Could not access computer system details from $($ComputerName) via WMI" -Category NotSpecified
                return
            }
        }
        Try
        {
            Write-Verbose "Getting Operating System details"
            $OperatingSystemDetails = Get-WmiObject -ComputerName $ComputerName -Class Win32_OperatingSystem -ErrorAction Stop
            Write-Verbose "Operating System Details Gathered."
        }
        catch
        {
            Write-Verbose "Could not get operating system details from $ComputerName via WMI"
            Write-Error -Message "Could not get operating system details from $($ComputerName) via WMI" -Category ConnectionError -RecommendedAction 'Check if the user has access and the firewall is off.'
        }
        Try
        {
            Write-Verbose "Getting Network Details"
            $NetworkConfigurationDetails = Get-WmiObject -ComputerName $ComputerName -Class Win32_NetworkAdapterConfiguration -ErrorAction Stop
            Write-Verbose "Network Details Gathered"
        }
        Catch
        {
            Write-Verbose "Could not get network details from $ComputerName via WMI"
            Write-Error -Message "Could not get network details from $($ComputerName) via WMI" -Category ConnectionError -RecommendedAction 'Check if the user has access and the firewall is off.'
        }
        
        switch ($OperatingSystemDetails.OSLanguage) {
            1 { $OSLanguage = 'Arabic' }
            4 { $OSLanguage = 'Chinese - China' }
            9 { $OSLanguage = 'English' }
            1025 { $OSLanguage = 'Arabic - Saudi Arabia' }
            1026 { $OSLanguage = 'Bulgarian' }
            1027 { $OSLanguage = 'Catalan' }
            1028 { $OSLanguage = 'Chinese - Taiwan' }
            1029 { $OSLanguage = 'Czech' }
            1030 { $OSLanguage = 'Danish' }
            1031 { $OSLanguage = 'German - Germany' }
            1032 { $OSLanguage = 'Greek' }
            1033 { $OSLanguage = 'English - United States' }
            1034 { $OSLanguage = 'Spanish - Traditional Sort' }
            1035 { $OSLanguage = 'Finnish' }
            1036 { $OSLanguage = 'French - France' }
            1037 { $OSLanguage = 'Hebrew' }
            1038 { $OSLanguage = 'Hungarian' }
            1039 { $OSLanguage = 'Icelandic' }
            1040 { $OSLanguage = 'Italian - Italy' }
            1041 { $OSLanguage = 'Japanese' }
            1042 { $OSLanguage = 'Korean' }
            1043 { $OSLanguage = 'Dutch - Netherlands' }
            1044 { $OSLanguage = 'Norwegian - Bokmal' }
            1045 { $OSLanguage = 'Polish' }
            1046 { $OSLanguage = 'Portuguese - Brazil' }
            1047 { $OSLanguage = 'Rhaeto-Romanic' }
            1048 { $OSLanguage = 'Romanian' }
            1049 { $OSLanguage = 'Russian' }
            1050 { $OSLanguage = 'Croatian' }
            1051 { $OSLanguage = 'Slovak' }
            1052 { $OSLanguage = 'Albanian' }
            1053 { $OSLanguage = 'Swedish' }
            1054 { $OSLanguage = 'Thai' }
            1055 { $OSLanguage = 'Turkish' }
            1056 { $OSLanguage = 'Urdu' }
            1057 { $OSLanguage = 'Indonesian' }
            1058 { $OSLanguage = 'Ukrainian' }
            1059 { $OSLanguage = 'Belarusian' }
            1060 { $OSLanguage = 'Slovenian' }
            1061 { $OSLanguage = 'Estonian' }
            1062 { $OSLanguage = 'Latvian' }
            1063 { $OSLanguage = 'Lithuanian' }
            1065 { $OSLanguage = 'Persian' }
            1066 { $OSLanguage = 'Vietnamese' }
            1069 { $OSLanguage = 'Basque ' }
            1070 { $OSLanguage = 'Serbian' }
            1071 { $OSLanguage = 'Macedonian ' }
            1072 { $OSLanguage = 'Sutu' }
            1073 { $OSLanguage = 'Tsonga' }
            1074 { $OSLanguage = 'Tswana' }
            1076 { $OSLanguage = 'Xhosa' }
            1077 { $OSLanguage = 'Zulu' }
            1078 { $OSLanguage = 'Afrikaans' }
            1080 { $OSLanguage = 'Faeroese' }
            1081 { $OSLanguage = 'Hindi' }
            1082 { $OSLanguage = 'Maltese' }
            1084 { $OSLanguage = 'Scottish Gaelic ' }
            1085 { $OSLanguage = 'Yiddish' }
            1086 { $OSLanguage = 'Malay - Malaysia' }
            2049 { $OSLanguage = 'Arabic - Iraq' }
            2052 { $OSLanguage = 'Chinese - PRC' }
            2055 { $OSLanguage = 'German - Switzerland' }
            2057 { $OSLanguage = 'English - United Kingdom' }
            2058 { $OSLanguage = 'Spanish - Mexico' }
            2060 { $OSLanguage = 'French - Belgium' }
            2064 { $OSLanguage = 'Italian - Switzerland' }
            2067 { $OSLanguage = 'Dutch - Belgium' }
            2068 { $OSLanguage = 'Norwegian - Nynorsk' }
            2070 { $OSLanguage = 'Portuguese - Portugal' }
            2072 { $OSLanguage = 'Romanian - Moldova' }
            2073 { $OSLanguage = 'Russian - Moldova' }
            2074 { $OSLanguage = 'Serbian - Latin' }
            2077 { $OSLanguage = 'Swedish - Finland' }
            3073 { $OSLanguage = 'Arabic - Egypt' }
            3076 { $OSLanguage = 'Chinese - Hong Kong SAR' }
            3079 { $OSLanguage = 'German - Austria' }
            3081 { $OSLanguage = 'English - Australia' }
            3082 { $OSLanguage = 'Spanish - International Sort' }
            3084 { $OSLanguage = 'French - Canada' }
            3098 { $OSLanguage = 'Serbian - Cyrillic' }
            4097 { $OSLanguage = 'Arabic - Libya' }
            4100 { $OSLanguage = 'Chinese - Singapore' }
            4103 { $OSLanguage = 'German - Luxembourg' }
            4105 { $OSLanguage = 'English - Canada' }
            4106 { $OSLanguage = 'Spanish - Guatemala' }
            4108 { $OSLanguage = 'French - Switzerland' }
            5121 { $OSLanguage = 'Arabic - Algeria' }
            5127 { $OSLanguage = 'German - Liechtenstein' }
            5129 { $OSLanguage = 'English - New Zealand' }
            5130 { $OSLanguage = 'Spanish - Costa Rica' }
            5132 { $OSLanguage = 'French - Luxembourg' }
            6145 { $OSLanguage = 'Arabic - Morocco' }
            6153 { $OSLanguage = 'English - Ireland' }
            6154 { $OSLanguage = 'Spanish - Panama' }
            7169 { $OSLanguage = 'Arabic - Tunisia' }
            7177 { $OSLanguage = 'English - South Africa' }
            7178 { $OSLanguage = 'Spanish - Dominican Republic' }
            8193 { $OSLanguage = 'Arabic - Oman' }
            8201 { $OSLanguage = 'English - Jamaica' }
            8202 { $OSLanguage = 'Spanish - Venezuela' }
            9217 { $OSLanguage = 'Arabic - Yemen' }
            9226 { $OSLanguage = 'Spanish - Colombia' }
            10241 { $OSLanguage = 'Arabic - Syria' }
            10249 { $OSLanguage = 'English - Belize' }
            10250 { $OSLanguage = 'Spanish - Peru' }
            11265 { $OSLanguage = 'Arabic - Jordan' }
            11273 { $OSLanguage = 'English - Trinidad' }
            11274 { $OSLanguage = 'Spanish - Argentina' }
            12289 { $OSLanguage = 'Arabic - Lebanon' }
            12298 { $OSLanguage = 'Spanish - Ecuador' }
            13313 { $OSLanguage = 'Arabic - Kuwait' }
            13322 { $OSLanguage = 'Spanish - Chile' }
            14337 { $OSLanguage = 'Arabic - U.A.E.' }
            14346 { $OSLanguage = 'Spanish - Uruguay' }
            15361 { $OSLanguage = 'Arabic - Bahrain' }
            15370 { $OSLanguage = 'Spanish - Paraguay' }
            16385 { $OSLanguage = 'Arabic - Qatar' }
            16394 { $OSLanguage = 'Spanish - Bolivia' }
            17418 { $OSLanguage = 'Spanish - El Salvador' }
            18442 { $OSLanguage = 'Spanish - Honduras' }
            19466 { $OSLanguage = 'Spanish - Nicaragua' }
            20490 { $OSLanguage = 'Spanish - Puerto Rico' }
            
            default { $OSLanguage = 'Unknown'}
        }
        $BootTime = $([Management.ManagementDateTimeConverter]::ToDateTime($OperatingSystemDetails.LastBootUpTime))
        $CurrentTime = $([Management.ManagementDateTimeConverter]::ToDateTime($OperatingSystemDetails.LocalDateTime))
        $Uptime = New-TimeSpan -Start $BootTime -End $CurrentTime
        
        Clear-Variable -Name AdaptersWithIPs -ErrorAction SilentlyContinue | Out-Null
        Clear-Variable -Name AdaptersSpeed -ErrorAction SilentlyContinue | Out-Null
        $AdaptersWithIPs = @()
        foreach ($a in $NetworkConfigurationDetails)
        {
            if (
            $a.IPAddress -gt "" -or $a.IPAddress.count -gt 1)
            {
                $AdaptersWithIPs += $a
            }
        }
        $AdapterDescription = [string]::join(" ; ", ($AdaptersWithIPs.Description))
        $IPAddresses = [string]::join(" ; ", ($AdaptersWithIPs.IPAddress))
        $DefaultGateway = [string]::join(" ; ", ($AdaptersWithIPs.DefaultIPGateway))
        $DNSSearchOrder = [string]::join(" ; ", ($AdaptersWithIPs.DNSServerSearchOrder))
        $MACAddresses = [string]::join(" ; ", ($AdaptersWithIPs.MACAddress))
        $DHCPEnabled = [string]::join(" ; ", ($AdaptersWithIPs.DHCPEnabled))
        
        $Obj = New-Object -TypeName System.Management.Automation.PSObject
        $Obj | Add-Member -Type NoteProperty -Name 'InputHostName' -Value $ComputerName
        $Obj | Add-Member -Type NoteProperty -Name 'Hostname' -Value $($ComputerSystemDetails.DNSHostName)
        $Obj | Add-Member -Type NoteProperty -Name 'OSName' -Value $($OperatingSystemDetails.Name -split '\|')[0]
        $Obj | Add-Member -Type NoteProperty -Name 'OSBuildNumber' -Value $($OperatingSystemDetails.BuildNumber)
        $Obj | Add-Member -Type NoteProperty -Name 'OSLanguage' -Value $OSLanguage
        $Obj | Add-Member -Type NoteProperty -Name 'LastBootTime' -Value $BootTime
        $Obj | Add-Member -Type NoteProperty -Name 'TotalUptime' -Value $("{0} D {1} H {2} M {3} S" -f $Uptime.Days, $Uptime.Hours, $Uptime.Minutes, $Uptime.Seconds)
        $Obj | Add-Member -Type NoteProperty -Name 'LoggedOnUser' -Value $($ComputerSystemDetails.Username)
        $Obj | Add-Member -Type NoteProperty -Name 'NetworkAdapter' -Value $AdapterDescription
        $Obj | Add-Member -Type NoteProperty -Name 'IPAddresses' -Value $IPAddresses
        $Obj | Add-Member -Type NoteProperty -Name 'DefaultGateways' -Value $DefaultGateway
        $Obj | Add-Member -Type NoteProperty -Name 'DNSSearchOrder' -Value $DNSSearchOrder
        $Obj | Add-Member -Type NoteProperty -Name 'MACAddresses' -Value $MACAddresses
        $Obj | Add-Member -Type NoteProperty -Name 'DHCPEnabled' -Value $DHCPEnabled

        Write-Output $Obj
    }
    End
    {
        
    }
}