Solved

Powershell to Get operating system version from a list of servers. How to mark not found servers

Posted on 2014-11-03
5
2,921 Views
Last Modified: 2014-11-03
Hi,

From a list of server host names I am trying to get a list of the operating systems installed.I am using the following command in powershell;
 Get-Content "servers.txt" | Get-ADComputer -Properties Name, OperatingSystem
| Select Name, OperatingSystem > ServerOperatingSystems.txt

Open in new window

This works to an extent and populates the text file with servers it is able to locate. For the servers it's unable to locate or obtain the operating system I would like this to be marked with "Not found". At the moment, there is no mention of these servers in the output text file. Essentially something like this;

Server 1 Windows Server 2012
Server 2 Windows Server 2012
Server 3 "Not found"


Thanks in advance.
0
Comment
Question by:MattyS82
  • 2
  • 2
5 Comments
 
LVL 10

Accepted Solution

by:
JoeKlimis earned 500 total points
ID: 40419180
Hi

Try the following and let me know how you get on

Regards
Joe

foreach ($computer in get-content Servers.txt) 
{
        if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet))
        {
        $OS = (Get-WmiObject -Computer $computer -Class Win32_OperatingSystem ).caption
		Write-output "$computer - $os"
		}		
	
		Else { write-output "$computer  - not responding or found" }
}

Open in new window

0
 
LVL 10

Expert Comment

by:JoeKlimis
ID: 40419207
if you have many servers this could take a while

make sure you are using Powershell V3 or about , you can do it this way too,

workflow get-OsVersion 
{
 param( [string[]]$Computers )
  foreach -parallel ($computer in $computers) 
  {
    if((Test-Connection -Cn $computer -BufferSize 16 -Count 1 -ea 0 -quiet))
        {
        $OS = (Get-WmiObject -Computer $computer -Class Win32_OperatingSystem ).caption
		"$computer $os"
		}		
		Else { "$computer  - not responding or found" }
  }
}
get-OsVersion -computers (get-content "Servers.txt")

Open in new window

0
 
LVL 1

Author Comment

by:MattyS82
ID: 40419232
perfect ! Thanks
0
 
LVL 1

Author Closing Comment

by:MattyS82
ID: 40419235
Great help thanks for that. Will keep this one handy for the future
0
 
LVL 39

Expert Comment

by:footech
ID: 40420464
You could avoid querying all the machines, and just use the information from AD.
Get-Content "servers.txt" | % `
{
  try {
    $name = $_
    Get-ADComputer $name -Properties Name, OperatingSystem -errorAction Stop | Select Name, OperatingSystem
  }
  catch {
    ""| Select @{n="Name";e={$name}},@{n="OperatingSystem";e={"Not Found"}}
  }
} | Out-File ServerOperatingSystems.txt

Open in new window

0

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Utilizing an array to gracefully append to a list of EmailAddresses
The following article is intended as a guide to using PowerShell as a more versatile and reliable form of application detection in SCCM.
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
This video shows how to use Hyena, from SystemTools Software, to bulk import 100 user accounts from an external text file. View in 1080p for best video quality.

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question