Hello,
Having issues with a script to output to console and text file the OS licensing status. I only need a zero for unlicensed and a 1 for licensed.
Any help is appreciated.
####### VARIABLES ####### ################################################################################################## ### Server list file name. Each server Hostname/FQDN/IP address has to be on new line. ###This file has to be located on your Desktop. $serverfile = "servers.txt" ################################################################################################### ####### END OF VARIABLES. DO NOT ALTER ANYTHING BELOW THIS LINE !!! ####### ################################################################################################### $FileDate = Get-Date -Format yyyyMMdd $xml_output = ".\server-check-$FileDate.xml" $txt_output = ".\server-check-$FileDate.txt" $serverlist = ".\$serverfile" Clear-Host Function global:Get-RawWMI ([Parameter(ValueFromPipeline=$TRUE,Mandatory=$TRUE,Position=0)][string]$ComputerName) { $COMPobj = Get-WmiObject -Class "Win32_ComputerSystem" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $CPUobj = Get-WmiObject -Class "Win32_Processor" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $CPUobj | %{ IF(-not ($_.NumberOfCores)){$_ | Add-Member -MemberType NoteProperty -Name "NumberOfCores" -Value 1} } $OSobj = Get-WmiObject -Class "Win32_OperatingSystem" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $RAMobj = Get-WmiObject -Class "Win32_PhysicalMemory" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $MEMobj = Get-WmiObject -Class Win32_PhysicalMemory -cn $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $DisksObj = Get-WmiObject -Class "Win32_LogicalDisk" -ComputerName $ComputerName -EA SilentlyContinue | Where-Object {($_.Size) -and (($_.MediaType -eq 12) -or ($_.MediaType -eq 0))} IF(-not $?){return $error[0]} $Mounts = Get-WMIObject -Class "Win32_Volume" -ComputerName $ComputerName -EA SilentlyContinue | Where-Object {$_.Name.Contains(":\") -and ($_.Name.Length -gt 3)} IF(-not $?){return $error[0]} $NICs = Get-WmiObject -Class "Win32_NetworkAdapterConfiguration" -ComputerName $ComputerName -EA SilentlyContinue | Where-Object {$_.IpEnabled} IF(-not $?){return $error[0]} $PageFile = Get-WmiObject -Class "Win32_PageFile" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $TimeZone = Get-WmiObject -Class "Win32_TimeZone" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $PersRoutes = Get-WmiObject -Class "Win32_IP4PersistedRouteTable" -ComputerName $ComputerName -EA SilentlyContinue IF(-not $?){return $error[0]} $OSAct = Get-WmiObject -Class SoftwareLicensingProduct -ComputerName $ComputerName -EA SilentlyContinue | Select-Object LicenseStatus IF(-not $?){return $error[0]} $ClusterObj = Get-WmiObject -ComputerName $ComputerName -Class "MSCluster_Cluster" -Namespace "root\mscluster" -EA SilentlyContinue IF($ClusterObj){$Clustering = "FO: $($ClusterObj.Name)"} ELSE{ $ClusterObj = Get-WmiObject -ComputerName $ComputerName -Class "MicrosoftNLB_Cluster" -Namespace "root\MicrosoftNLB" -EA SilentlyContinue IF($ClusterObj){$Clustering = "NLB: $($ClusterObj.Name)"} ELSE{$Clustering = "N/A"} } return New-Object PSObject -Property @{ Computer = $COMPobj CPU = $CPUobj OS = $OSobj OSAct = $OSActObj Cluster = $Clustering RAM = $RAMobj TotalRAM = $MEMobj Disks = $DisksObj Mounts = $Mounts NICs = $NICs PageFile = $PageFile TimeZone = $TimeZone PersRoutes = $PersRoutes } } ################################################################################################################################## Function global:Screen ([Parameter(ValueFromPipeline=$TRUE,Mandatory=$TRUE,Position=0)][string]$ComputerName, [Parameter(Position=1)][switch]$NoClip) { $CMO = Get-RawWMI -ComputerName $ComputerName IF($CMO.Exception){return $CMO.Exception} IF($CMO.PageFile){[array]$PageFiles = $CMO.PageFile | %{"$($_.EightDotThreeFileName) ($($_.FileSize/1MB)/$($_.MaximumSize)MB)"}} $RemoteRegistry = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $ComputerName) IF(-not $?){return} $dotNETkey = $RemoteRegistry.OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP") $UACkey = $RemoteRegistry.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system") $RAMstr = $CMO.RAM | Select-Object -ExpandProperty Capacity | %{($_/1024MB).ToString()} [hashtable]$RAMhash = @{} $RAMstr | % { IF($RAMhash.ContainsKey($_)){$RAMhash.$_++} ELSE{$RAMhash += @{$_ = 1}} } $MEMstr = (($CMO.RAM | Measure-Object -Property Capacity -Sum).Sum)/1GB $CPUstr = $CMO.CPU | %{"$(($_.Name).Trim()) $($_.NumberOfCores)-core"} [hashtable]$CPUhash = @{} $CPUstr | %{ IF($CPUhash.ContainsKey($_)){$CPUhash.$_++} ELSE{$CPUhash += @{$_ = 1}} } [array]$Disks = $null $CMO.Disks | %{ IF($_.DriveType -eq 4){$_.VolumeName = $_.ProviderName} $Disks += "Device Name - $($_.DeviceID)($($_.VolumeName))`nTotal Used - $("{0:N2}" -f (($_.Size - $_.FreeSpace)/1GB)) GB`nTotal Volume - $("{0:N2}" -f ($_.Size/1GB)) GB`nFree Space - $("{0:N2}" -f (($_.FreeSpace)/1GB)) GB`nFile System - $($_.FileSystem)`n" } [array]$Mounts = $null $CMO.Mounts | %{$Mounts += "$($_.Name) - $("{0:N2}" -f (($_.Capacity - $_.FreeSpace)/1GB)) GB of $("{0:N2}" -f ($_.Capacity/1GB)) GB used )$($_.FileSystem))"} [array]$Network = $null $CMO.NICs | % { [string]$out = "$($_.Description)`n`tIP: `t$($_.IPAddress -join "`n`t`t")" IF($_.MacAddress){$out += "`n`tMAC:`t$($_.MacAddress -join "`t`t")"} IF($_.DefaultIPGateway){$out += "`n`tGW: `t$($_.DefaultIPGateway -join "`n`t`t")"} IF($_.DNSServerSearchOrder){$out += "`n`tDNS:`t$($_.DNSServerSearchOrder -join "`n`t`t")"} $Network += $out } $LastBoot = ([Management.ManagementDateTimeConverter]::ToDateTime($CMO.OS.LastBootUpTime)) $LocalTime = ([Management.ManagementDateTimeConverter]::ToDateTime($CMO.OS.LocalDateTime)) $Uptime = $LocalTime - $LastBoot $LocaleCode = $CMO.OS.Locale $LocaleInfo = [System.Globalization.CultureInfo]([int]("0x" + $LocaleCode)) $sysinfo = systeminfo /s $ComputerName /fo csv | ConvertFrom-Csv | select 'OS Name*' $outObj = New-Object PSObject -Property @{ Name = $CMO.Computer.Name Domain = $CMO.Computer.Domain Platform = $CMO.Computer.Model Cluster = $CMO.Cluster OS = "$($sysinfo.'OS Name') ($($CMO.OS.OSArchitecture))" OSAct = $OSActObj.LicenseStatus -join "`n" CPU = ($CPUhash.GetEnumerator() | %{"$($_.Value) x $($_.Name)"}) -join "`n" RAM = ($RAMhash.GetEnumerator() | %{"$($_.Value) x $($_.Name) GB"}) -join "`n" TotalRAM = ($MEMstr | %{"$_ GB"}) -join "`n" Storage = $Disks -join "`n" MountPoints = $Mounts -join "`n" Network = $Network -join "`n`n" PersRoutes = ($CMO.PersRoutes | %{"ND = $($_.Name) GW = $($_.NextHop) MASK = $($_.Mask) METRIC = $($_.Metric1)"}) -join "`n" TimeZone = $CMO.TimeZone.Caption Locale = $LocaleInfo.Name CountryCode = $CMO.OS.CountryCode PageFiles = $PageFiles -join "`n" LastBoot = ([Management.ManagementDateTimeConverter]::ToDateTime($CMO.OS.LastBootUpTime)).ToString() UpTime = $Uptime dotNET = $dotNETkey.GetSubKeyNames() -join " | " UAC = "Enabled:$($UACkey.GetValue("EnableLUA")) | $($UACkey.GetValue("ConsentPromptBehaviorAdmin"))" #} | Select-Object Name,Domain,Platform,Cluster,OS,OSAct,CPU,RAM,RAMTotal,Storage,MountPoints,Network,PersRoutes,TimeZone,Locale,CountryCode,LastBoot,UpTime,PageFiles,dotNET,UAC,McAfeeVSEVersion,McAfeeEngineVersion,McAfeeDatVersion,McAfeeDatDate } | Select-Object Name,Domain,Platform,Cluster,OS,OSAct,CPU,RAM,TotalRAM,Storage,MountPoints,Network,PersRoutes,TimeZone,Locale,CountryCode,LastBoot,UpTime,PageFiles,dotNET,UAC IF(!$NoClip){($outObj | Out-String).Trim() | clip} return $outObj } ################################################################################################################################## $date_time = Get-Date -Format dd.MM.yyyy $date_time+= " " $date_time+= Get-Date -Format HH:mm:ss $servers = Get-Content $serverlist -ea SilentlyContinue IF (-Not $?) { Write-Host "=============================" -ForegroundColor Magenta Write-Host "!File $serverlist does not exist, screening will continue locally!" -ForegroundColor Yellow $servers = $env:COMPUTERNAME Write-Host "=============================" -ForegroundColor Magenta } Write-Host "===============================================" -ForegroundColor Blue Write-Host "Server Pre-Migration Check Script" -ForegroundColor Yellow Write-Host "" -ForegroundColor White Write-Host "===============================================" -ForegroundColor Blue Write-Host "Current Date/Time: $date_time" -ForegroundColor Yellow Write-Host "===============================================" -ForegroundColor Blue do { do { Write-Host "===============================================" -ForegroundColor Blue write-host "Please select your ouptut type:" -ForegroundColor Cyan Write-Host "" write-host "T - Output to TXT -> $txt_output" -ForegroundColor White write-host "X - Output to XML -> $xml_output" -ForegroundColor White write-host "C - Output to CONSOLE" -ForegroundColor White write-host "" write-host "E - Exit" -ForegroundColor White write-host "" Write-Host "" Write-Host "PLEASE NOTE: Files created before will be replaced with new ones!" -ForegroundColor Red Write-Host "If you need previous files, you can rename them before continue." -ForegroundColor Red Write-Host "" write-host -nonewline "Type your choice and press Enter: " -ForegroundColor White $choice = read-host write-host "" $ok = $choice -match '^[TXCE]+$' if ( -not $ok) { write-host "Invalid selection" -ForegroundColor Red } } until ( $ok ) switch -Regex ( $choice ) { "T" # FOR TEXT OUTPUT { Write-Output "---Server Pre-Migration check---" > $txt_output Write-Output "---Output Date/Time: $date_time---" >> $txt_output $num = 1 foreach ($server in $servers) { Write-Host "$num : $server" $txt = screen $server Write-Output "----------------------------" >> $txt_output Write-Output "SERVER NAME: $server" >> $txt_output Write-Output $txt >> $txt_output $num++ Write-Host " - DONE" -ForegroundColor Green } Write-Output "-----------FINISHED------------" >> $txt_output Write-Output "UAC:" >> $txt_output Write-Output " - First value is if the UAC is Enabled(1) or Disabled(0)" >> $txt_output Write-Output " - Second value is for ConsentPromptBehaviorAdmin." >> $txt_output Write-Output " - For more information click here: https://msdn.microsoft.com/en-us/library/cc232761.aspx." >> $txt_output Write-Output "---------INTERNAL USE----------" >> $txt_output Write-Output "--Server check script" >> $txt_output Write-Output "" Write-Output "" } "C" # FOR Console OUTPUT { Clear-Host Write-Host "---Server Pre-Migration check---" -ForegroundColor White Write-Host "---Output Date/Time: $date_time---" -ForegroundColor White $num = 1 foreach ($server in $servers) { Write-Host "----------------------------" -ForegroundColor Green Write-Host "$num : $server" screen $server $num++ } Write-Host "-----------FINISHED------------" -ForegroundColor Cyan Write-Host "" Write-Host "" } "X" # FOR XML OUTPUT { $num = 1 Write-Output '' > $xml_output Write-Output "" >> $xml_output Write-Output "" >> $xml_output foreach ($server in $servers) { Write-Host "$num : $server" $xml = screen $server $servername = $xml.Name Write-Output "" >> $xml_output Write-Output "$server" >> $xml_output Write-Output ""$xml.Domain"" >> $xml_output Write-Output ""$xml.Platform"" >> $xml_output Write-Output ""$xml.Cluster"" >> $xml_output $sOS =Get-WmiObject -class Win32_OperatingSystem -ComputerName $server foreach($sProperty in $sOS) { $ossp = $sProperty.ServicePackMajorVersion } Write-Output "$($xml.OS) SP$($ossp)" >> $xml_output Write-Output ""$xml.CPU"" >> $xml_output Write-Output ""$xml.RAM"" >> $xml_output #Write-Output ""$xml.TotalRAM"" >> $xml_output Write-Output ""$xml.dotNET"" >> $xml_output Write-Output ""$xml.Storage"" >> $xml_output $diskinfo = Get-WmiObject Win32_DiskDrive -ComputerName $server | % { $disk = $_ $partitions = "ASSOCIATORS OF " +"{Win32_DiskDrive.DeviceID='$($disk.DeviceID)'} " +"WHERE AssocClass = Win32_DiskDriveToDiskPartition" Get-WmiObject -ComputerName $server -Query $partitions | % { $partition = $_ $drives = "ASSOCIATORS OF " +"{Win32_DiskPartition.DeviceID='$($partition.DeviceID)'} " +"WHERE AssocClass = Win32_LogicalDiskToPartition" Get-WmiObject -ComputerName $server -Query $drives | % { New-Object -Type PSCustomObject -Property @{ Disk = $disk.DeviceID DiskSize = $disk.Size DiskModel = $disk.Model Partition = $partition.Name RawSize = $partition.Size DriveLetter = $_.DeviceID VolumeName = $_.VolumeName Size = $_.Size FreeSpace = $_.FreeSpace } } } } $b=0 foreach ($hdd in $diskinfo) { $b++ $driveletter=$hdd.DriveLetter $size=$hdd.Size $freespace=$hdd.FreeSpace $disksize=$hdd.DiskSize $driveSize = ([math]::Round($size / 1GB, 1)) $diskSize = ([math]::Round($disksize / 1GB, 1)) $driveFree = ([math]::Round(($freespace / $Size)*100, 1)) Write-Output "$driveletter $diskSize GB / $driveFree% Free" >> $txt_output #$xml_output | } $ip = get-WmiObject Win32_NetworkAdapterConfiguration -ComputerName $server | Where {$_.IPAddress.length -gt 0} IF ($?) { $a = 0 foreach ($ipaddress in $ip) { $a++ $ip="IP=$($ipaddress.IPAddress -join "`n") `n" IF ($ipaddress.DefaultIPGateway){$ip+="GW=$($ipaddress.DefaultIPGateway -join "`n") `n"} IF ($ipaddress.MacAddress){$ip+="MAC=$($ipaddress.MacAddress -join "`n") `n"} IF($ipaddress.DNSServerSearchOrder){$ip+="DNS=$($ipaddress.DNSServerSearchOrder -join "`n")"} Write-Output "$ip" >> $xml_output } } Write-Output ""$xml.TimeZone"" >> $xml_output Write-Output ""$xml.Locale"" >> $xml_output Write-Output ""$xml.PageFiles"" >> $xml_output Write-Output ""$xml.LastBoot"" >> $xml_output Write-Output ""$xml.Uptime.ToString()"" >> $xml_output Write-Output ""$xml.UAC"" >> $xml_output Write-Output "" >> $xml_output Write-Host " - DONE" -ForegroundColor Green $num++ } Write-Output "" >> $xml_output Write-Output "" >> $xml_output }