Distribusjon av Windows 7 - Part 1 8


Tips Bilde:
Du kan finne mer informasjon om automat LTI distribusjon i Windows 7 Resource Kit fra Microsoft Press. Jeg er hovedforfatter for denne Resource Kit og jeg også opprettholde Unofficial brukerstøtte for Windows 7 Resource Kit hvor du finner de siste oppdateringene og annen nyttig informasjon.

I del 16 i denne serien du har lært hvordan du bruker MDT database for å tilpasse utrulling av Windows 7 basert på UUID av hver målmaskin. I den artikkelen også lært deg hvordan du bruker WMI til å bestemme UUID av en datamaskin hvis dette UUID ikke vises i systemets BIOS eller tilhørende dokumentasjon. Metoden vi pleide å gjøre dette men var litt rotete, pluss datamaskinen hvis UUID du ønsker å finne ut må allerede ha hatt en Windows-operativsystemet er installert på den.

Dette bringer opp et spørsmål: Kan du bruke WMI til å bestemme UUID av en datamaskin hvis det ikke er noe operativsystem installert på det? Svaret er ja. For å gjøre dette, må vi først rydde opp i scripting ting vi gjorde i de to siste artiklene. Da må vi bygge en tilpasset Windows forhåndsinstallasjonsmiljø (WinPE) bilde, legge til skript til dette bildet, og brenne image til CD media. Du kan deretter bruke denne CD for å starte opp en bare-metal datamaskin til WinPE og kjøre skript for å bestemme systemets UUID.

Og det er hva denne artikkel og den neste er om. Først i denne artikkelen vil vi lage et rent lite skript som vil vise datamaskinens UUID uten å fikle rundt. Så i den neste artikkelen skal vi lære å lage et tilpasset WinPE "verktøy" CD du kan bruke til å kjøre skript på en bare-metal system som har noe operativsystem installert for å kunne fastslå systemets UUID. Når du har brukt din WinPE CD for å kjøre skript på en rekke mål datamaskiner, kan du skrive inn disse UUID inn i MDT database og distribuere tilpassede Windows bilder til hver datamaskin som ønsket.

Tips:
Hvis du er ny til WMI scripting, sjekk ut min 14-del innledende serie artikler om WindowsNetworking.com tittelen Administrere Windows-nettverk ved hjelp av skript.

Script fastslår UUID av en datamaskin

I del 16 av denne serien så vi hvordan vi kunne bestemme UUID av en datamaskin ved hjelp av WMI som følger:

  1. Vi begynte med DisplayClassProperties.vbs
    script fra del 13 av min tidligere serie av skript artikler som viser navnene på alle egenskapene til en WMI klasse sammen med verdiene av disse egenskapene.
  2. Neste vi kjørte WBEMTEST på datamaskinen for å finne ut hvordan vi må tilpasse strWMIQuery = < streng >
    linje av skriptet slik at skriptet vil fungere på den aktuelle datamaskinen. Den faktiske fremgangsmåten for å gjøre dette er: (a) kjøre WBEMTEST (b) koble til root \\ cimv2 navnerom (c) klikk ENUM forekomster (d) type Win32_ComputerSystemProduct (e) trykk OK. Den resulterende utgang fra WBEMTEST blir så brukt som verdien av < string > i ovennevnte linje av skriptet. Og dette må gjøres manuelt som WBEMTEST utgang støtter ikke kopiere til utklippstavlen!
  3. Så når manuset ble tilpasset, vi kjørte den på datamaskinen, og inngår som en del av manuset utgang var datamaskinens UUID.

    Dette var alle litt rotete selvfølgelig-vi ville heller ikke å løpe WBEMTEST på datamaskinen eller må tilpasse manuset hver gang vi har å kjøre den. Og vi vil heller bare få manuset til utgang datamaskinens UUID og ikke en haug med andre ting også.

    Her er hvordan vi kan gjøre dette. Vi begynner med den modifiserte DisplayClassProperties.vbs
    script tatt fra Part 16 i denne serien:

    'DisplayClassProperties.vbs
    ' Brukes til å finne den UUID av en spesifikk stasjonær datamaskin
    'By Mitch Tulloch (www.mtit.com)
    Option Explicit
    On Error Resume Next
    Dim strComputer
    Dim strWMINamespace
    Dim strWMIQuery
    Dim objWMIService
    Dim colItems
    Dim objItem
    strComputer =
    strWMINamespace = "\\ root \\ CIMV2"
    strWMIQuery = "". ": Win32_ComputerSystemProduct.IdentifyingNumber = 'MXG5380254 NA540', Name = 'PY196AV-ABA a1130e ', versjon =' 0n31211CT101AMBEM00 '"
    Set objWMIService = GetObject (" winmgmts: \\\\ "& strComputer & strWMINamespace & strWMIQuery)
    WScript.Echo" Antall egenskapene til "& strWMIQuery & "Klassen er" & objWMIService.Properties_.count
    For Hver objItem i objWMIService.Properties_
    Wscript.Echo "Property:" & objItem.name & vbTab & "Value:" & objItem.value
    Neste

    Nå, for å oppnå det WBEMTEST gjør og returnere forekomster av Win32_ComputerSystemProduct klasse, må vi bruke SWbemServices.InstancesOf metoden SWbemServices objekt. For å finne ut hvordan du gjør dette, jeg bare tilpasset følgende skript fra en side av den gode gamle Windows 2000 Scripting Guide plakater (se her):

    strComputer = "."
    Set objSWbemServices = GetObject ("winmgmts: \\\\" & strComputer & "\\ root \\ cimv2")
    Set colSWbemObjectSet = objSWbemServices.ExecQuery _
    ("SELECT * FROM Win32_Service")
    For hver objSWbemObject I colSWbemObjectSet
    Wscript.Echo "Navn:" & objSWbemObject.Name
    Neste

    Min tilpasset versjon av skriptet ovenfor ser slik ut: "."

    strComputer =
    Set objSWbemServices = GetObject (" winmgmts: \\\\ "& strComputer &" \\ root \\ cimv2 ")
    Set colSWbemObjectSet = objSWbemServices.ExecQuery _
    (" SELECT * FROM Win32_ComputerSystemProduct ")
    For Hver objSWbemObject I colSWbemObjectSet
    strIdentifyingNumber = objSWbemObject.IdentifyingNumber
    strName = objSWbemObject.Name
    strVersion = objSWbemObject.Version
    Neste
    Wscript.Echo "IdentifyingNumber:" & strIdentifyingNumber
    Wscript.Echo "Navn:" & strName
    Wscript.Echo "Version:" & strVersion

    Grunnen til at jeg trenger skriptet ovenfor for å bestemme verdiene av de tre egenskapene IdentifyingNumber, navn og versjon er fordi Win32_ComputerSystemProduct klasse har tre viktige egenskaper, nemlig (du gjettet det) IdentifyingNumber, navn og Versjon. For å se dette, se dokumentasjonssiden for denne klassen på MSDN. Husk at en nøkkel eiendom er en egenskap som gir en unik identifikator for en forekomst av en klasse, og for å koble til en forekomst av en klasse, må du angi en bestemt forekomst ved hjelp av nøkkelen tilhører klassen. Viktige egenskaper er merket med "Key" qualifier i MSDN dokumentasjon-henvise tilbake til del 13 av min tidligere serie scripting artikler for mer informasjon om viktige egenskaper.

    Nå må jeg rett og slett å slå sammen de ovennevnte tilpasset manuset med mine tidligere DisplayClassProperties.vbs
    script for å opprette følgende nytt manus som jeg har kalt UUID.vbs
    (merk at jeg har forenklet dette skriptet ved å utelate variable definisjoner og feilhåndtering):

    'UUID.vbs
    ' Viser UUID av en datamaskin
    'By Mitch Tulloch ( «.» www.mtit.com)
    strComputer =
    strWMINamespace = "\\ root \\ CIMV2"
    Set objSWbemServices = GetObject ("winmgmts: \\\\" & strComputer & "\\ root \\ cimv2" )
    Set colSWbemObjectSet = objSWbemServices.ExecQuery ("SELECT * FROM Win32_ComputerSystemProduct")
    For Hver objSWbemObject I colSWbemObjectSet
    strIdentifyingNumber = objSWbemObject.IdentifyingNumber
    strName = objSWbemObject.Name
    strVersion = objSWbemObject.Version
    Neste
    strWMIQuery = ": Win32_ComputerSystemProduct.IdentifyingNumber = '" & strIdentifyingNumber _
    & "', Name ='" & strName & "', Version ='" & strVersion & chr (39)
    Set objWMIService = GetObject ("winmgmts: \\\\" & strComputer & strWMINamespace & strWMIQuery)
    For Hver objItem i objWMIService.Properties_
    Hvis objItem.name = "UUID" Så
    Wscript.Echo objItem.name & "=" &Amp; objItem.value
    End If
    Neste

    Legg merke til at den vanskelige delen her er å sørge for at sitatene er korrekte i strWMIQuery = < streng >
    uttalelse. For eksempel, avslutter setningen med & chr (39), som tilføyer enkelt sitat som trengs for å skikkelig fullsyntaksen til setningen. Det tok litt fikling for å få dette til å fungere-triks som hjalp meg var å midlertidig sette en Wscript.echo strWmiQuery
    uttalelse umiddelbart etter strWMIQuery = < streng >
    uttalelse slik at jeg kunne kjøre skriptet og utgang innholdet i strengen for å se om strengen hadde riktig syntaks, og deretter gjøre en endring, og kjøre script på nytt, og så videre før jeg fikk syntaksen riktig.

    Testing av Script

    La oss nå se om skriptet fungerer ved å kjøre det fra kommandolinjen på en datamaskin som har Windows XP installert på den (figur 1):


    Figur 1:
    Kjører UUID.vbs på en datamaskin som har et operativsystem

    La oss gjøre vår script enda enklere å kjøre ved å opprette en medfølgende batch fil som heter UUID.bat Hotell som lyder som følger:

    ECHO OFF
    cscript.exe //nologo UUID.vbs

    Dette gjør det enklere å kjøre manuset og gjør også produksjonen renere (figur 2):


    Figur 2:
    Kjører UUID.bat på en datamaskin som har et operativsystem

    Konklusjon

    Nå som vår script er klar, må vi bygge et WinPE image og inkludere våre skript i dette bildet, slik at vi kan drive vår skript på bare-metall systemer. Du vil lære hvordan du gjør dette i neste artikkel i denne serien.