Administrere Windows-nettverk ved hjelp av scripts - De basics

Du er nødt til å lære det grunnleggende Windows scripting hvis du ønsker å gjøre noen av disse tingene med hell. Overraskende nok er det ikke så vanskelig når du kommer inn i det, og det er det denne artikkelserien skal handle om. Starter fra det grunnleggende Windows scripting, vil du utvikle en forståelse av hvordan å script ulike aspekter av Windows-nettverk. Til slutt, vil du være i stand til skript oppgaver du ønsker å automatisere for å gjøre livet ditt som en admin enklere. Og du vil være i stand til å gjøre dette både ved å skrive skript fra scratch og ved å tilpasse offentlig tilgjengelige skript du kan laste ned fra ulike kilder. Jeg vil også henvise deg til ulike ressurser underveis som vil hjelpe deg å lære mer om Windows scripting, og introdusere deg til noen skripting verktøy også, som du kan finne nyttig.
Les andre 'Administrere Windows-nettverk ved hjelp av skript tips
Del 1: The basicsPart 2: Rengjøring upPart 3: Forstå WMIPart 4: Bruke Win32_NetworkAdapterConfigurationPart 5: Komme over humpPart 6: Remote scripting første stepsPart 7: Feilsøking mysteriet errorPart 8: Feilsøking ekstern skripting med Network Monitor 3.0Part 9: Forstå ekstern scriptingPart 10: To triks bruker WMI scriptsPart 11: Mer ekstern skripting tipsPart 12: Egenskaper av WMI classPart 13: En retur-alle-verdier scriptPart 14: WMI skript ressurser

Scripting TCP /IP-innstillinger

De fleste admins bruke Visual Basic Script (VBScript) for å skrive sine Windows admin skript. VBScript er ikke bare et kraftig språk, syntaksen er ganske enkel å lære. VBScript kan også brukes sammen med Windows Management Instrumentation (WMI) og Active Directory Services grensesnitt (ADSI) til manus omtrent alle aspekter av et Windows-system eller Active Directory-basert nettverk. Vi kommer til å begynne å lære Window scripting ved å bruke VBScript med WMI til å faktisk gjøre noe du kan finne nyttig: endre IP-adressen til et nettverkskort.

Hvorfor skulle du ønske å gjøre dette? Vel, jeg bruker Virtual Server og Virtual PC mye for å sette opp testmiljøer, og jeg synes ofte jeg må flytte en virtuell maskin (VM) som kjører Windows Server 2003 fra ett virtuelt nettverk til et annet for å kunne gjenbruke serveren for noen andre bruk. Det betyr vanligvis at jeg trenger å endre IP-adressen på serveren (og muligens standard gateway i tillegg). Nå vet jeg at du kan gjøre dette ved å åpne Nettverkstilkobling i Kontrollpanel og høyreklikke på Lokale tilkoblinger og velge Egenskaper og velge Internet Protocol (TCP /IP) i kategorien Generelt, og deretter klikke Egenskaper og inn i en ny IP-adresse og klikke OK to ganger, men jeg blir lei av å gjøre det-ikke du? Og ja, jeg kunne åpne en ledetekst og bruke Netsh-kommandoen, men Netsh har så mange forskjellige sammenhenger og kommandoer og parametere som jeg pleier å ende opp med å lese Netsh hjelp info om og om igjen før jeg endelig få det riktig.

Men det vi egentlig prøver å gjøre her er å lære hvordan å script, så la oss se hvordan vi kan endre IP-adressen til en maskin ved hjelp av VBScript og WMI. Dette betyr å lære visse begreper underveis inkludert objekter, metoder, egenskaper, navnerom, og så videre

Til å begynne med, vil vi driver vår script på den lokale datamaskinen.

strComputer = ". "

Her str- prefikset betyr strComputer er en variabel som inneholder en streng, mens perioden er et wildcard som refererer til den lokale datamaskinen og brukes som start poenget med WMI navnerom. Hva er en WMI navnerom? Det er en hierarkisk samling av forskjellige klasser av objekter som kan brukes til å håndtere ulike aspekter av Windows-maskiner. For eksempel, det er roten navnerommet og under det er et dusin eller så navnerom inkludert SECURITY, perfmon, CIMV2, og så videre. De fleste WMI klasser som er nyttig å jobbe med er funnet i roten \\ cimv2 navnerom, og før vi kan arbeide med noen av disse klassene vi trenger på å bruke dem til objekter. Da kan vi vise egenskapene til disse objektene og kaller sine metoder for å manipulere dem

En kort avstikker

Klasser, objekter, egenskaper, metoder -. Hva er alt dette ? Her er en enkel analogi som kan hjelpe: vurdere microbølgeovn klassen. Med andre ord, den abstrakte samling av alle mulige mikrobølgeovner (ikke noen spesiell virkelige ovn). Denne klassen kan ha følgende egenskaper: Farge, CubicInches, HasTurntable, og så videre. Egenskaper er ting som er egenskapene til en klasse. Med andre ord, Mikrobølgeovner har en viss farge, en viss inne størrelse i cubic inches, de enten har turntables i dem, eller de ikke gjør det, og så videre.

microbølgeovn klassen har også metoder. Metoder er ting klassen kan gjøre, eller at du kan gjøre med klassen. For denne klassen, kan enkelte metoder omfatter SetCookingTime, SetPowerLevel, Reset, og så videre. Vanligvis å kalle en metode du må passere en parameter til det. For eksempel å ringe SetCookingTime metoden vi kan definere en CookingTime variabel i sekunder, og deretter passere denne variabelen til SetCookingTime metode for en bestemt forekomst av denne klassen (en faktisk, real-world mikrobølgeovn-ikke den abstrakte klassen). I WMI VBScript ville du gjøre dette på følgende måte:

intCookingTime = 120 errSetCookingTime = objMicrowave.SetCookingTime (intCookingTime)

Men hvor ble det av Mikrobølgeovn objekt (objMicrowave) kommer fra? Vi har ikke laget den ennå, så la oss gjøre det ved hjelp av Set kommandoen og Create metode:

Set objMicrowave = Create (" microbølgeovn ")

Egentlig, for å være nit-pickingly nøyaktig, er objMicrowave ikke en microbølgeovn objekt. I stedet er objMicrowave en objekt referanse
til forekomst
av microbølgeovn klassen. Men vi er bare begynnelsen her, slik at vi ikke vil plukke for mange nits.

Legge til en strColor variabel, slik at vi kan sette farge tilhører vår mikrobølgeovn til Green, ser vår script nå slik ut (med noen forklarende kommentarer lagt til):

strColor = " Green " 'spesifiserer farge intCookingTime = 120' angir koketiden i sekunder Sett objMicrowave = Create (" microbølgeovn ") 'skaper forekomst av objektet errSetCookingTime = objMicrowave.SetCookingTime (intCookingTime)' kaller en metode for å stille inn tilberedningstiden og sparer resulterende feil kode objMicrowave.Color = strColor 'setter verdien av Color eiendommen

At alt er fornuftig, ikke sant?

Tilbake til skriptet

Her er hva du må gjøre hvis du ønsker å få tilgang til innstillingene for TCP /IP-konfigurasjons maskinens bruker WMI:

Set objWMIService = GetObject (" winmgmts: \\\\ " & strComputer & " \\ root \\ cimv2 ")

Dette kobler deg til roten \\ cimv2 navne på den lokale datamaskinen ved å definere et objekt som heter objWMIService og sette den lik håndtaket returneres av GetObject metode. Når du er koblet til dette navne, kan du samle informasjon fra det som følger:

Set colNetAdapters = objWMIService.ExecQuery (" Velg * fra Win32_NetworkAdapterConfiguration hvor IPEnabled = TRUE ") ") < .no>

Hva gjør dette? Først kan du se et objekt som heter objWMIService som vi instansiert et øyeblikk siden i forrige tråd. Etter dette objektet er ExecQuery, som enten er en eiendom eller en metode (det er alltid object.property eller object.method) og vi kan gjette at det er en metode på grunn av ordlyden dvs. gjennomføring av en spørring. Den ExecQuery metoden kalles ved å sende en parameter til det, og denne parameteren er en SQL-setning (VELG) som returnerer en samling (col-prefiks) av alle (stjernen) nettverkskort konfigurasjoner på maskinen som har TCP /IP innbundet og aktivert på adapteren. Samlingen som returneres ved å kalle denne metoden blir deretter tildelt variabelen colNetAdapters, som står for innsamling av alle nettverkskort på maskinen.

Hva kan vi gjøre med denne samlingen? Når du har en samling, må du sløyfe gjennom den ved hjelp av en For Each ... Neste sløyfe ut:

For Hver objNetAdapter i colNetAdapters "gjøre noe med hverandre nettverkskort konfigurasjon Neste

Du har alltid å sløyfe gjennom samlinger som dette, selv om det bare er ett objekt i samlingen.

Nå hva vi virkelig ønsker å gjøre er å endre IP-adressen til vår adapter, så la oss definere noen flere variabler:

arrIPAddress = Array (" 172.16.11.99 ") arrSubnetMask = Array (" 255.255.255.0 ")

Merk at variablene som definerer den nye IP-adressen og nettverksmasken må være array-variabler. Hvordan vet vi det? Vel først, kan Windows-datamaskiner har mer enn én IP-adresse, standard gateway, og så videre. Så hvorfor ikke bruke array-variabler for alle IP-innstillingene bare for å være konsekvent. Og andre, hvis vi ser opp Win32_NetworkAdapterConfiguration klassen i WMI Reference på MSDN, kan vi finne at dette er tilfelle. Vi skal grave i WMI Reference i fremtidige artikler om, og bare ta mitt ord for det for nå.

Til slutt må vi ringe EnableStatic metoden i Win32_NetworkAdapterConfiguration klassen for å endre IP-adressen og standard gateway av vår maskinens nettverksadapteren til de nye innstillingene vi har definert ved hjelp av vår rekke variabler. Vi gjør dette slik:

errEnableStatic = objNetAdapter.EnableStatic (arrIPAddress, arrSubnetMask)

Her err- variabelen er nødvendig som et sted å lagre feilkoden tilbake når fremgangsmåten drives.

Å bringe det hele sammen

La oss sette alle bitene sammen nå, og se hva vi har fått:

strComputer = " . " arrIPAddress = Array (" 172.16.11.99 ") arrSubnetMask = Array (" 255.255.255.0 ") Sett objWMIService = GetObject (" winmgmts: \\\\ " & strComputer & " \\ root \\ cimv2 ") Set colNetAdapters = objWMIService.ExecQuery (" Velg * fra Win32_NetworkAdapterConfiguration ") for hver objNetAdapter i colNetAdapters errEnableStatic = objNetAdapter.EnableStatic (arrIPAddress, arrSubnetMask) Neste

Det er det - minus variable definisjoner, feilhåndtering bruke input og bekreftelse utgang. Vi vil legge til at ting i neste artikkel i denne serien, men først la oss se om det fungerer. For å gjøre dette, jeg lagret manuset (sørg Word Wrap er slått av i Notepad) som ChangeIPAddress.vbs og kopiert det til skrivebordet på en server som er statisk IP-adresse er 172.16.11.45. Da jeg åpnet en ledetekst som administrator og endret til skrivebordet katalog og kjørte skriptet bruker cscript.exe, kommandolinjeskriptet vert. Her er resultatet:

C: \\ Documents and Settings \\ Administrator \\ Desktop > ipconfig

Windows IP-konfigurasjon

Ethernet adapter Local Area Connection:

Tilkoblingsspesifikt DNS-suffiks. : IP adresse. . . . . . . . . . . . : 172.16.11.45 Subnet mask. . . . . . . . . . . : 255.255.255.0 Standard gateway. . . . . . . . . : 172.16.11.1

C: \\ Documents and Settings \\ Administrator.DC-1 \\ Desktop > cscript ChangeIPAddress.vbs

Microsoft (R) Windows Script Host versjon 5.6 Copyright (C) Microsoft Corporation 1996-2001. Alle rettigheter reservert

C:. \\ Documents and Settings \\ Administrator \\ Desktop > ipconfig

Windows IP-konfigurasjon

Ethernet-kort Lokal tilkobling:

Tilkoblingsspesifikt DNS-suffiks. : IP adresse. . . . . . . . . . . . : 172.16.11.99 Subnet mask. . . . . . . . . . . : 255.255.255.0 Standard gateway. . . . . . . . . : 172.16.11.1

Jepp, det fungerer! IP-adressen til maskinen ble vellykket endret 0,45 til 0,99 som den andre ipconfig-kommandoen viser.