Поиск серверов с Virtual Server 2005 и Hyper-V


В крупной сети администратору может быть сложно уследить за всеми серверами и рабочими станциями. Как точно определить, на каких именно машинах установлено ПО виртуализации? Ведь любой пользователь, имеющий достаточно прав на свой компьютер, может установить на него Virtual Server. Сейчас, в свете выхода System Center Virtual Machine Manager 2008, вопрос учета становится еще более актуальным.


Я хочу предложить вашему рассмотрению простой сценарий, который любой сможет запустить в своем домене и получить информацию — где установлены Virtual Server 2005 R2 SP1 или Hyper-V. Данный подход основан на поиске маркеров SCP (Server Connection Point), которые Virtual Server 2005 R2 SP1 и Hyper-V прописывают в атрибутах учетной записи компьютера в AD. Вот пример такого сценария.



 


On Error Resume Next


Const SCPMSVS = “MS Virtual Server”


Const SCPMSHV = “Microsoft Hyper-V”


 


Set objSystemInfo = CreateObject(“ADSystemInfo”)


Set objRootDSE = GetObject(“LDAP://rootDSE”)


 


strNetBIOSDomain = objSystemInfo.DomainShortName


strDNSDomain = objRootDSE.Get(“defaultNamingContext”)


 


wscript.echo “Counting Virtual Server 2005 R2 SP1 hosts”


DoQuery strDNSDomain, strNetBIOSDomain, SCPMSVS


wscript.echo


wscript.echo “Counting Microsoft Hyper-V hosts”


DoQuery strDNSDomain, strNetBIOSDomain, SCPMSHV


 


Sub DoQuery(ByVal szDomainDN, ByVal szDomainShortName, ByVal szSCP)


 


    oConnection = CreateObject(“ADODB.Connection”)


    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 & “‘”


    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(“Domain: “ & szDomainShortName & “: “ & oRecordSet.RecordCount & ” hosts”)


 


        oRecordSet.MoveFirst()


        Do Until oRecordSet.EOF


            szNodeName = oRecordSet.Fields(“distinguishedName”)


            szNodeName = Mid(szNodeName, InStr(szNodeName, “,CN=”) + 4) ‘ Trim “CN=<szSCP>,CN=”


            szNodeName = Left(szNodeName, InStr(szNodeName, “,”) – 1) ‘ Trim the domain DN


            wscript.echo(szNodeName)


            oRecordSet.MoveNext()


        Loop


 


    Else


        wscript.echo(“Domain: “ & szDomainShortName & “: 0 hosts”)


    End If


    oRecordSet = Nothing


    oCommand = Nothing


    oConnection.Close()


    oConnection = Nothing


 


End Sub


 


Также текст сценария прилагаю к этой статье отдельным файлом — так как копирование с экрана может изменить некоторые символы. Удачной инвентаризации!

inventory.txt

Comments (0)

Skip to main content