Query Domain OU and Identify Physical/Virtual Servers

This Powershell script can help identify whether servers in Active Directory are virtual or physical.

Create a new Powershell script file named Get-Physical.ps1 with below contents.

$serverList = Read-Host -Prompt "Specify OU Distinguished name: (eg. OU=Normal Services - 2008 Servers,OU=Servers,DC=CONTOSO,DC=LOCAL";

#Generates servers.txt file from above input query, searching and generating list of servers within OU.
Get-ADComputer -filter * -SearchScope Subtree -SearchBase $serverList | select name | Export-CSV servers.txt

$servers = Get-Content 'Servers.txt' | Foreach-Object {$_ -replace "`"", ""};



foreach($server in $servers)
{
try
 {
 $compsys=get-wmiobject -computer $server win32_computersystem -ErrorAction SilentlyContinue
 if($compsys.model.toupper().contains("VIRTUAL"))
 {
 write-output "$server is Virtual"
 }
 Else
 {
 write-output "$server is Physical"
 }
 }
catch
 {
 write-output "$server is not Windows OS or insufficient access"
 }

}