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.

image


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

 

image

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 !