Scripts para identificar servidores Hyper-V em um domínio
Recentemente tive que descobrir uma maneira para identificar quais os servidores Windows Server 2008 e R2 no domínio que tem o Hyper-V instalado.
Quando você instala o Hyper-V em um servidor, ele cria um tipo de objeto no Active Directory do tipo “object class” chamado serviceConnectionPoint (SPC), e preenchido com o valor “Microsoft Hyper-V”.
Desta forma, podemos fazer pesquisas LDAP no Active Directory com estas condições, você pode usar scripts VBS e PowerShell, veja eles abaixo :
Script VBS :
On Error Resume Next
Const SCP = "Microsoft Hyper-V"
' Add as many lines as needed for the domains in your org.
DoQuery "DC=contoso,DC=com", "CONTOSO", SCP
Sub DoQuery(szDomainDN, szDomainShortName, szSCP)
Set oConnection = CreateObject("ADODB.Connection")
Set oCommand = CreateObject("ADODB.Command")
oConnection.Provider = ("ADsDSOObject")
oConnection.Open "Ads Provider"
oCommand.ActiveConnection = oConnection
oCommand.Properties("Page Size") = 99
oCommand.Properties("Searchscope") = &H2 'ADS_SCOPE_SUBTREE
oCommand.Properties("Chase Referrals") = &H60
'ADS_CHASE_REFERRALS_ALWAYS
oCommand.CommandText = _
"select distinguishedName from 'LDAP://" & _
szDomainDN & "' " & _
"where objectCategory='serviceConnectionPoint' " & _
"and cn='" & szSCP & "'"
Set oRecordSet = oCommand.Execute
If Err Then
wscript.echo _
"ERROR: Unable to find Domain Rooted at: " & _
szDomainDN
exit sub
End If
If Not oRecordSet.EOF Then
wscript.echo szDomainShortName & ":" & _
oRecordSet.RecordCount
' If you want to enumerate the machine names,
' uncomment this block of code
oRecordSet.MoveFirst
Do Until oRecordSet.EOF
szNodeName = _
oRecordSet.Fields("distinguishedName")
'Trim "CN=<szSCP>,CN="
szNodeName = _
mid(szNodeName, InStr(szNodeName,",CN=")+4)
'Trim the domain DN
szNodeName = _
Left(szNodeName,InStr(szNodeName,",")-1)
wscript.echo szNodeName
oRecordSet.MoveNext
Loop
else
wscript.echo szDomainShortName & ": 0"
end if
set oRecordSet = Nothing
set oCommand = Nothing
oConnection.Close
set oConnection = Nothing
End Sub
Troque a linha em amarelo pelo nome do seu domínio, salve o conteúdo com o nome ListaHyper.vbs, abra um prompt de comando como Administrator e execute C:\cscript ListaHyper.vbs para salvar o resultado em um arquivo texto execute C:\cscript ListaHyper.vbs > HyperVServers.txt. O arquivo abaixo mostra o nome do domínio seguido pelo número de servidores e abaixo o nome de todas as máquinas.
Script PowerShell
Abra o PowerShell :
Importe o módulo do Active Directory
C:\Import-Module ActiveDirectory
Execute o comando :
Get-ADObject –Filter {ObjectClass –eq “serviceConnectionPoint” –and Name –eq “Microsoft Hyper-V”} | select DistinguishedName
O resultado será uma lista de todos os servidores e seu caminho DN no domínio.
PS: Este script só funciona para servidores Hyper-V que são membros do domínio do Active Directory
Divirtam-se !