17 Net.Exe, kommandofiler, Windows Scripting Host och perl



Relevanta dokument
22 Användarnas hemmamappar

7 Microsofts grupphanteringsmodell i Windows NT-domäner

23 Användargrupper: lokala, globala och specialgrupper

28 Inloggningsskript, profiler och systemprinciper//system Policies

Kommandotolken hittar du under Start->Program->Tillbehör->Kommandotolken

21 De tre viktigaste kontona: Administratör//Administrator, Gäst/ /Guest och System//System

Del 1: Skapa konto i Exchange

en översikt Användarkonton i Windows-familjen Användarkonton i Windows NT Workstation och Windows NT Server

Objektorienterad programmering i Java I

Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa.

25 Lokal behörighet//local Security (lokal säkerhet, NTFS-behörighet)

13 Inbyggda verktyg för nätadministration

27 Samspel mellan lokal behörighet och delningsbehörighet för utdelade

Filbeskrivningar Eller på särskild CD skiva

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Alla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php

LEX INSTRUKTION LEX LDAP

Övning 1. Datateknik A, Java I, 5 poäng. Att ladda hem och installera Java Att skriva ditt första Javaprogram Att kompilera och exekvera ditt program

Detta dokument skall ge en kortfattad introduktion till Jasmine installationen vid DSV.

15 Granskning//Auditing

Manuell installation av SQL Server 2008 R2 Express för SSF Timing

Laboration 1 Introduktion till Visual Basic 6.0

Win95/98 Nätverks Kompendium. av DRIFTGRUPPEN

2 Arbetsgrupp eller Windows NTdomän: vilken passar bäst?

Lab 7, 48 steg till ett bättre liv i Unix-labbet

Administrationsmanual ImageBank 2

Nils Byström, Avd f IT och inköp. Projekt AD-design Uppsala universitet DiarieNr: UFV 2009/413. Revision 1.0 Filnamn AD skyddade personuppgifter.

KPP053, HT2016 MATLAB, Föreläsning 1. Introduktion till MATLAB Skript Inläsning och utskrift av variabler Ekvationssystem Anonyma funktioner

Skapa din egen MediaWiki

Laboration 0. Enhetsbokstaven anges med ett kolon efter och man läser ofta ut detta, exempelvis C:(sekolon).

Allmänt om programvaror och filer i Windows.

Programutveckling med Java Development Kit. (JDK 1.1.x) och Programmers File Editor (PFE 7.02)

version: Sidan 1 av 5

Konsolfönster i Windows Momentet ingår i kursen PDA DTR1206 Lab 1 DOS Konsolfönstret

LVDB i GEOSECMA. Innehåll. Inledning. Produkt: GEOSECMA Modul: LVDB Skapad för Version: Uppdaterad:

Innehåll. Installationsguide

Installation, Novaschem 2005

7 Mamut Client Manager

Workshop IBA internet based assessment

20 Namngivning av datorer, arbetsgrupper/domäner, användarkonton

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

Bengans datorhörna WINDOWSTIPS

Ladda upp filer fra n PLC till PC

14 Användarkonton och kontoprinciper

JAWS Nätverksauktorisering

Introduktion till Matlab

Ja, men resultatet blir inte lika bra. Det är att skapa genvägsikoner. Se anvisningar nedan:

Lathund för BankID säkerhetsprogram

Kör som root handbok. Geert Jansen Översättare: Stefan Asserhäll

Introduktion till Jasmine 1.2 ODQL

Installationsanvisningar VisiWeb. Ansvarig: Visi Closetalk AB Version: 2.3 Datum: Mottagare: Visi Web kund

Lär dig programmera! Prova på programmering med enkla exempel! Björn Regnell

Lite mer om CGI-programmering

Excel-guide. Introduktion

11 Domän- och serverlistorna// Browse Lists

ARX på Windows Vista, Windows 7 eller Windows 2008 server

Ekonomiportalen Sa kommer du iga ng

Introduktion till datorer och nätverk vid institutionen för naturgeografi och ekosystemvetenskap

Manuell installation av SQL Server 2008 R2 Express SP2 fo r SSF Timing

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

12 Sammankopplade domäner// Trusts

Filsäkerhet i Windows NT (NTFS)

Introduktion till Matlab

Administrationsmanual ImageBank 2

Användarhandledning Version 1.2

Grupp Policys. Elektronikcentrum i Svängsta Utbildning AB

Läs detta innan du fortsätter, eller skriv ut det, klicka runt lite och läs samtidigt.

Vanliga frågor för VoiceXpress

Konton skapas normalt av användaren själv, men kan i undantagsfall behöva läggas upp av annan person, exempelvis en junioradmin.

Mac OS X 10.6 Snow Leopard Installationshandbok

Memeo Instant Backup Snabbguide. Steg 1: Skapa ett gratis Memeo-konto. Steg 2: Anslut din lagringsenhet till datorn

Installation xvis besökssystem, Koncern

BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER

Använda Office 365 på en iphone eller en ipad

Installationsguide fo r CRM-certifikat

Zoomtext 2019 Skripting

PM Dokumentation

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

LVDB i GEOSECMA. Innehåll. Inledning. Produkt: GEOSECMA Modul: LVDB Skapad för Version: Uppdaterad:

Telia Centrex IP Administratörswebb. Handbok

LÄR DIG ANVÄNDA DIN MAC. från grunden! Nu med Mac OS X Leopard! Harry Peronius

Snabbguide till First Class

Emacs. Eric Elfving Institutionen för datavetenskap (IDA) 22 augusti 2016

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

1284_omslag.qxd :13 Sida 1 ECDL START OFFICE 2003 Allmän IT Windows XP Word 2003 Outlook 2003

Lathund för Novell Filr

Primus Vägledning för massimport av bilder. Primus 5.6.4

Telia Centrex IP Administratörswebb Handbok

Övning 1: Skapa virtuell maskin för utveckling.

Manual - Storegate Team

LVDB i GEOSECMA. Innehåll. Produkt: GEOSECMA Modul: LVDB Skapad för Version: Uppdaterad:

1.1 Skapa ett Inline-Script som skapar filen För att skapa ett inline script drar man InLine till där man vill ha själva scriptet.

Hja lp till Mina sidor

Program. Kapitel make Program Interpreterande och kompilerande program

Innehållsförteckning ADSync Windows Azure Active Directory ADSynC- Installation Konfigurera ADSync... 4

FC-kurs Röbäcks skolområde, åk 5-6

Grundkurs 1 IKT Filhantering

DIG IN TO. Nätverksadministration

Använda Google Apps på din Android-telefon

E-posthantering med Novell Groupwise WebAccess

Transkript:

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Nu skall jag försöka övertyga dig om hur förträffligt det är att arbeta med program i en Kommandotolk//Command Prompt och med kommandofiler (.bat-filer). Även om det inte låter aptitligt bör du läsa om Windows Scripting Host den hör framtiden (Windows NT 5.0) till. Net.Exe och dess underkommandon Om du skriver Net (och trycker på Enter) i en Kommandotolk/ /Command Prompt visas en lista över de kommandon du kan använda tillsammans med Net.Exe: Kommando Net Accounts Hantera inställningar för kontoprinciper. Synkronisera domänens kontodatabas. Visa vilken roll datorn har i domänen. Kommando Net Computer Lägga till/ta bort datorkonton från domänens kontodatabas. Kommando Net Config Server/Srv/Svr Ändra vissa inställningar för serverdelen, bl.a. om dess namn skall synas i domän- och serverlistor. Kommando Net Config Workstation/Rdr/Wksta Ändra vissa inställningar för arbetsstationsdelen. Kommando Net Continue tjänst Fortsätta en tidigare pauserad tjänst//service (se även Net Pause, Net Start och Net Stop). Kommando Net File/Net File id /Close Visa alla öppna filer (över nätverket). Stänga en viss öppen fil. 617

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Kommando Net Group Visa globala grupper. Ändra inställningar för globala grupper. Hantera medlemskap i globala grupper. Upprätta nya globala grupper. Ta bort globala grupper. Kommando Net Help Visa information om de olika kommandona mycket användbar. Kommando Net HelpMsg felnummer Visa information om fel med nummer felnummer (se nedan om du vill ha en lista med alla fel). Mitt favoritfel har nummer 1219. Kommando Net LocalGroup Visa lokala grupper. Ändra inställningar för lokala grupper. Hantera medlemskap i lokala grupper. Upprätta nya lokala grupper. Ta bort lokala grupper. Kommando Net Name Lägga till och ta bort NetBIOS-namn av typ 03 (för Net Send). Kommando Net Pause tjänst Pausera en tjänst. Använd Net Continue tjänst för att fortsätta (se även Net Continue, Net Start och Net Stop). Kommando Net Print Hantera utskrifter även över nätverket. Kommando Net Send Skicka meddelande till utvalt namn, alla användare anslutna till en server eller alla i en viss domän/arbetsgrupp. Kommando Net Session/Net Session \\datornamn /Delete Visa vilka datorer som har en session till din dator. Koppla ned sessionen från \\datornamn. Kommando Net Share Visa information om enskild resurs, visa alla utdelade resurser på din dator, dela ut resurser och sluta dela ut resurser på din dator. Kommando Net Start tjänst Starta tjänsten tjänst (se även Net Continue, Net Pause och Net Stop). Kommando Net Statistics Server/Net Stats Server/Srv/Svr 618

Net.Exe och dess underkommandon Visa insamlad statistik för serverdelen. Kommando Net Statistics Workstation/Net Stats Workstation/Rdr/Wksta Visa insamlad statistik för arbetsstationsdelen. Kommando Net Stop tjänst Stoppa tjänsten tjänst (se även Net Continue, Net Pause och Net Start). Kommando Net Time Visa tiden på en viss dator eller i domänen. Ställa tiden på den lokala datorn till någon av dessa tider. Kommando Net Use Ansluta till nätverksresurs, mapp, skrivare eller named pipe. Kommando Net User Visa användarkonton. Ändra inställningar för användarkonton. Upprätta nya användarkonton. Ta bort användarkonton. Kommando Net View Visa servrar i den egna arbetsgruppen/domänen, visa utdelade resurser på utvald server, visa servrar i utvald domän eller i NetWare-nätet. Odokumenterade växlar till kommandot net accounts Ibland blir nyttan av medlemskap i olika gruppostlistor uppenbar: en dag i augusti 1998 var det någon som skrev till NTSecurity (se kapitel 34) att det finns tre odokumenterade växlar till kommandot net accounts: q /LockoutThreshold: antal försök q /LockoutWindow: minuter q /LockoutDuration: minuter Växlarna motsvarar inställningar för utelåsning av konton i Kontohanteraren för domäner//user Manager for Domains: 619

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Inställningar för utelåsning av konton i Kontohanteraren för domäner/ /User Manager for Domains. Inställningarna i bilden erhölls med hjälp av dessa tre kommandon (i en Kommandotolk//Command Prompt): net accounts /lockoutthreshold:5 net accounts /lockoutwindow:99999 net accounts /lockoutduration:100000 Inställningen för Utelåsningsvaraktighet//Lockout Duration enligt bilden fås genom att ange ett värde större än 99999 till växeln LockoutDuration. Giltiga värden för LockoutDuration är 1 99999 (det största värde som visas i rutan Varaktighet//Duration). Om inställningen för någon av växlarna anges till 0 (noll) innebär det att konton inte låses ute (radioknappen Inga utelåsta konton//no account lockout aktiv). Microsoft Excel är ett utmärkt verktyg för att bygga långa kommandofiler Jag skriver långa kommandofiler eftersom jag försöker föra till torgs min åsikt att Excel är ett mycket gott hjälpmedel för att göra kommandofiler där många rader följer ett visst mönster, såsom att upprätta några hundra nya användarkonton, eller ändra gruppmedlemskap för 4711 användarkonton. Kommandofiler kan användas för att: q Upprätta hundratals användarkonton på den primära domänkontrollanten med uppgift om inloggningsskript och hemmamapp (med mera) q Tillverka inloggningsskript för användarkontona q Upprätta globala grupper q Göra domänkonton till medlemmar av globala grupper 620

Microsoft Excel är ett utmärkt verktyg för att bygga långa kommandofiler q Upprätta lokala grupper på flera Windows NT-datorer q Gör globala grupper till medlemmar av lokala grupper q Upprätta hemmamappar för användare med färdig mappstruktur q Åsätta lämplig lokal behörighet till användarnas hemmamappar q Upprätta gemensamma mappar för grupper av användare q Åsätta lämplig lokal behörighet till gemensamma mappar q Dela ut gemensamma mappar till grupper av användare med lämplig delningsbehörighet q Dela ut hemmamappar med lämplig delningsbehörighet För att åstadkomma allt detta används tre verktyg som inte är inbyggda i Windows NT: Excel, RmtShare och KiXtart (de båda senare från Resource Kit). Förutom dem används Net.Exe och CACLs.Exe. De kommandon till Net.Exe som används är: Kommando net user kontonamn /add /domain Upprättar ett nytt användarkonto, kontonamn, i domänens kontodatabas. Utan /domain upprättas kontot i den lokala kontodatabasen. Kommando net group "namn på global grupp" /add Upprättar en ny global grupp i domänens kontodatabas. Kommando net group "namn på global grupp" kontonamn /add Lägger till ett användarkonto i en global grupp. Kommando net localgroup "namn på lokal grupp" /add Upprättar en ny lokal grupp i den lokala kontodatabasen (är den lokala datorn en domän-kontrollant upprättas gruppen i domänens kontodatabas och blir därmed kontrollantlokal). Kommando net accounts /sync Synkroniserar domänens kontodatabas Kommando net localgroup "namn på lokal grupp" "namn på global grupp" /add Gör en global grupp till medlem av en lokal grupp. 621

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Användarkonton förses med olika uppgifter När kommandofilen upprättar användarkonton anges personens namn, jag använder fältet Beskrivning//Description för uppgifter om när kontot upprättades, avdelningstillhörighet och närmaste chef. Kontots bäst-före-datum, inloggningsskript och hemmamapp anges likaså. Så här kan de se ut: net user ceciliac /add /fullname:"cecilia Cinnober" /comment:"marknad (1998-05-14; irisi)" /expires:1999-06-01 /scriptpath:kix32.exe /homedir:\\sleipner\ceciliac$ /domain Hela kommandot är naturligtvis på en enda rad. Kommandot ovan upprättar ett nytt domänkonto med följande uppgifter: Kontouppgift Innehåll Kontouppgift Innehåll Kontouppgift Innehåll Kontonamn ceciliac Användarens hela namn Cecilia Cinnober Beskrivning Marknad (1998-10-01; irisi) Kommentar Avdelning, datum för upprättande, kontonamn för chef Kontouppgift Bäst-före-datum Innehåll 1999-11-01 Kommentar Kontots sista giltighetsdatum är dagen före Kontouppgift Inloggningsskript Innehåll kix32.exe Kommentar Kix32.Exe kommer att använda skriptet KiXtart.Scr Kontouppgift Hemmamapp Innehåll \\sleipner\ceciliac$ Kommentar Dollartecknet gör att resursen inte syns i nätverket Det är inte svårt att föreställa sig dryga hundratalet snarlika rader, men jag hoppas att du inte tycker att det känns meningsfullt att mata in allt för hand. Det är här Excel är till stor hjälp. 622

Microsoft Excel är ett utmärkt verktyg för att bygga långa kommandofiler Låt oss studera hur Excel kan hjälp till att upprätta ett antal användarkonton enligt samma mönster som ovan. Dessa uppgifter kan Excel fås att bidra med: q Kontonamn, bildat utifrån användarens hela namn q Bäst-före-datum, t.ex. första dagen i månaden efter (ett år senare) q UNC-namnet för hemmamappen Vi måste mata in dessa uppgifter: q Användarens hela namn q Avdelningstillhörighet q Namn på närmaste chef q Namn på den server som användarens hemmamapp skall finnas på Jag menar att detta bör delas upp i ett par steg. Det första steget är finna lämplig metod för att bilda kontonamn, vilket vi använder ett Excel-ark till. När kontonamnet är klart infogar vi det i ett annat Excel-ark. Finna lämpligt kontonamn första Excel-arket Excel-arket som används för att finna lämpligt kontonamn arket visar fyra olika sätt. Excel-arket i bilden visar fyra olika sätt att bilda kontonamn. (läs i kapitel 20 för mer information om olika metoder att bilda kontonamn.) Vi vill inte ha svenska bokstäver i kontonamnet varför vi först avlägsnar dem. Excel kan göra det åt oss med funktionen Substitute vilken byter ut en bokstav mot en annan, ex. å mot 623

17 Net.Exe, kommandofiler, Windows Scripting Host och perl a. Därefter bildas själva kontonamnet. I korthet ser Excel-arket ut så här: Kolumn A: Kolumn B: Förnamn Efternamn Kolumn C: Förnamn utan åäöéë (omvandlat till små bokstäver) Kolumn D: Efternamn utan åäöéë (omvandlat till små bokstäver) Kolumn E: Förnamn (upp till 7 bokstäver) + första bokstav i efternamn Kolumn F: Första bokstav i förnamn + efternamn (upp till 7 bokstäver) Kolumn G: Förnamn (upp till 6 bokstäver) + första och sista bokstav i efternamn Kolumn H: Efternamn (upp till 6 bokstäver) + första och sista bokstav i förnamn Kolumn E till H innehåller varsitt förslag till kontonamn. Låt oss ta namnet Cecilia Cinnober som exempel (namnet behandlas som kolumnnamnen ovan anger): Kolumn A: Cecilia Kolumn B: Cinnober Kolumn C: cecilia Kolumn D: cinnober Kolumn E: ceciliac (cecilia + c) Kolumn F: ccinnobe (c + cinnobe) Kolumn G: cecilicr (cecili + c + r) Kolumn H: cinnobca (cinnob + c + a) Bilda net-kommandot andra Excel-arket När du valt lämplig metod kopierar du kontonamnet, för- och efternamn till nästa Excel-ark vilket innehåller formler för att färdigställa net-kommandot. 624

Microsoft Excel är ett utmärkt verktyg för att bygga långa kommandofiler I det andra arket erhålls net-kommandot. Det andra arket innehåller dessa kolumner: Kolumn A: Kolumn B: Förnamn Efternamn Kolumn C: Kontonamn Kolumn D: Avdelningsnamn (eller någon annan lämplig beteckning) Kolumn E: Namn på närmaste chefs användarkonto Kolumn F: Namn på server för hemmamapp Kolumn G: Net-kommandot (en formel används för denna kolumn) Formeln som används för att bilda Net-kommandot ser ganska svårsmält ut vid första betraktandet: ="net user " & Kontonamn & " /add /FullName:""" & Förnamn & " " & Efternamn & """ /Comment:""" & Avdelning & " (" & Text(Now();"åååå-MM-dd") & "; " & Chef & ")"" /Expires:" & Text(Date(Year(Now())+1;Month(Now())+1;1); "åååå-mm-dd") & " /ScriptPath:kix32.exe /homedir:\\" & Hemmaserver & "\" & Kontonamn & "$ /domain" En icke föraktlig del av formeln handlar om att bilda snygga datumformat, utan dem ser den något lätthanterligare ut: ="net user " & Kontonamn & " /add /FullName:""" & Förnamn & " " & Efternamn & """ /Comment:""" & Avdelning & " (1998-05-14; " & Chef & ")"" /Expires:1996-06-01" & " 625

17 Net.Exe, kommandofiler, Windows Scripting Host och perl /ScriptPath:kix32.exe /homedir:\\" & Hemmaserver & "\" & Kontonamn & "$ /domain" Nu hoppas jag att den inte ser fullt så avskräckande ut. När du studerar den upptäcker du att innehållet i olika kolumner läggs samman till en enda lång sträng av bokstäver och siffror. För att sedan göra en kommandofil kopierar du helt enkelt alla rader och klistrar in dem i Anteckningar//NotePad. Resultatet blir en färdig kommandofil, klar att köra. Denna kommandofil sparar du sedan i mapp, du kan också skriva ut den den utgör en utmärkt dokumentation av dina domänkonton. Lägga gärna till några kommentarer i början så att du lättare kan använda den i framtiden. Lägga till domänkonton till global grupp När domänkontona är upprättade vill du kanske dela in dem i lämpliga globala grupper. Nästa Excel-ark använder namnet på avdelningen för att bilda en global grupp (Avd + avdelningens namn). För att göra domänkonton till medlemmar av den globala gruppen används Net-kommandot: net group "namn på global grupp" kontonamn /add /domain Det bildas genom att kopiera kontonamn och avdelningsnamn till ett nytt Excel-ark. Medlemskap i globala grupper är en angelägenhet för det tredje Excel-arket. Net-kommandot bildas av följande formel: ="net group Avd" & Avdelning & " " & Kontonamn & " /add /domain" 626

Microsoft Excel är ett utmärkt verktyg för att bygga långa kommandofiler Använda CACLs.Exe för lokal behörighet Det inbyggda verktyget CACLs.Exe hanterar lokal behörighet. I en kommandofil kan det användas för alla former av lokal behörighet såsom gemensamma mappar och hemmamappar. Kommandot cacls h:\users\adolfina /T /G adolfina:c Administrators:F åsätter lokal behörighet till mappen h:\users\adolfina och dess undermappar (/T) enligt: Kontot adolfina: Ändra//Change Fullständig behörighet//full Con- Administratörer//Administrators: trol Växeln /T uttyds: mappträdet från detta ställe och nedåt, /G betyder Grant, d.v.s. medge. CACLs.Exe är litet tjurig och kräver att du bekräftar ditt val. Detta undgår du genom att skicka ett y genom ett rör (pipe) till kommandot på följande sätt: echo y cacls h:\users\adolfina /T /G adolfina:c Administrators:F RmtShare delar ut resurser på andra datorer Verktyget RmtShare.Exe i Resource Kit används för att dela ut resurser på andra Windows NT-datorer, som om Net Share kunde användas över nätverket. En typisk kommandorad med RmtShare.Exe kan se ut så här: RmtShare \\sleipner\adolfina$=h:\users\adolfina /remark:"1998-05-14; annalisa" /g Users:c Det är alltså hemmamappen till kontot annalisa som delas ut på detta sätt. En kommentar om när resursen delades ut och ansvarig chef ingår. Det verkar som om NetWare-metoden för hantering av behörighet används eftersom den lokala gruppen Användare/ /Users åsätts delningsbehörigheten Ändra//Change. Resterande Excel-ark och en färdig kommandofil finns på webben Du finner alla Excel-ark och en färdig kommandofil på http:// www.duplex.se. Det finns kommentar i kommandofilen för att 627

17 Net.Exe, kommandofiler, Windows Scripting Host och perl beskriva vilka delar som kommer från Excel och vilka som måste göras för hand. Kommandofilen delar ut resurser på två datorer: den primära domänkontrollanten och ytterligare en server. Kommandospråket i Windows NT är större än i MS-DOS Om du som jag är gammal DOS-räv lärde du dig en gång för länge sedan vad man kan göra med kommandospråket i MS-DOS. Det är inte mycket, men trots sina begränsningar har användare och nätverksadministratörer kunnat utnyttja kommandospråket till förbluffande saker. När Microsoft OS/2 en gång lanserades hade det försetts med ett utökat kommandospråk (om än inte mycket) man kunde till exempel skriva flera kommandon på samma rad och få dem utförda efter varandra. Windows NT har ända sedan den första versionen haft ungefär samma möjligheter som OS/2, men Microsoft har dessutom valt att utöka kommandospråket rejält till Windows NT 4.0. Flera kommandon på samma rad I Windows NT har du alltid kunna skriva flera kommandon på samma rad i kommandotolken. Genom att åtskilja kommandon med olika tecken kan du få Windows NT att bete sig olika. Skiljetecken & Innebörd Åtskiljer kommandon på samma rad ingen annan innebörd ( ) Grupperar kommandon ^ && Gör att <, >, och behandlas som vanliga tecken, utan särskild innebörd Kommandot efter utförs endast om det första kommandot utfördes utan problem Kommandot efter utförs endast om det första kommandot inte kunde utföras utan problem Kommandon som ändras med Command Extensions Den aktuella listan för ändringar ser du genom kommandot help cmd i en kommandotolk. I Windows NT 4.0, Service Pack 3, 628

Kommandospråket i Windows NT är större än i MS-DOS uppför sig dessa kommandon olika om Command Extensions är på eller av: Assoc Call CD/ChDir Color Del/Erase EndLocal For FType Goto If MD/MkDir PopD Prompt PushD Set SetLocal Shift Start Alla är inte lika användbara, men de förbättringar som gjorts i Call, CD, For, Goto, If, Shift och Start kan användas till mycket. De nya PushD/PopD är inte heller dumma. Förbättringar i hanteringen av argument på kommandoraden Alla kommandofiler kan hantera argument (information) som skrivs på dess kommandorad. En av förbättringarna i Command Extensions är hur dessa argument kan delas upp (om de är filnamn med sökvägar). Filnamnen kan delas upp i sina delar och man kan t.o.m. använda miljövariabler (ex. Path) för att Windows NT skall leta rätt på filen. Dess möjligheter erbjuds (n är en av 0 till 9): Kommando Innebörd %~fn Hela sökvägen (enhet/disk, mappar, filnamn med filtillägg) %~dn Enheten/disken %~pn Sökvägen %~nn Filnamnet %~xn Filtillägget %~snn Korta filnamnet (8.3) %~sxn Korta filtillägget (8.3) %~$Miljövariabel:n Hela sökvägen (söker filnamnet i sökvägar angivna i miljövariabeln) Kommandona kan användas tillsammans för att, ex., få enhet/disk 629

17 Net.Exe, kommandofiler, Windows Scripting Host och perl och filnamn. En liten varning dock ofta används den aktuella mappen/sökvägen för att bilda namnen i tabellen, Windows NT behandlar alla argument som vore de filer i den aktuella mappen. Förbättringar i Goto Goto har fått en liten, men snygg, förbättring. Om du skriver Goto :EOF kommer kommandofilen att avslutas. EOF uttyds End Of File och Goto :EOF innebär alltså hopp till slutet av kommandofilen. Förbättringar i Call Call kan användas för att starta om samma kommandofil med samma parametrar eller ändrade. Dessutom betyder %* samtliga kommandoradsargument. Studera denna kommandofil: @echo off set FileName=%0 echo %1 %2 %3 %4 call :Rekursion1 %* goto :eof :Rekursion1 if not (%0)==(%FileName%) echo Kom hit genom Call! echo %1 %2 %3 %4 goto :eof Om den sparas med namnet CallTest.Bat och startas med kommandoraden CallTest a b c d skrivs dessa rader till skärmen: a b c d Kom hit genom Call! a b c d Detta borde göra det möjligt minska behovet av flera, samverkande, kommandofiler det som behövs kan skrivas i samma kommandofil. En viktig sak: eftersom kommandofilen startar om måste du lämna den två gånger. Första gången du lämnar filen hamnar den 630

Kommandospråket i Windows NT är större än i MS-DOS på raden efter Call-kommandot, nästa gång den lämnas avslutas körningen (du ser två rader med Goto :eof i exemplet ovan). Förbättringar i CD/ChDir CD/ChDir har fått en ny växel /D vilket gör att den faktiskt byter enhet/disk om den nya sökvägen innebär det. Mellanslag i sökvägen uppfattas som del av sökvägen du behöver alltså inte skriva hela sökvägen inom citattecken. Några exempel: cd /d d:\arbete Byter från aktuell enhet/disk och mapp till d: och mappen \arbete (oavsett på vilken disk du befann dig tidigare) cd \Program Files\Visual Studio Byter aktuell mapp till mappen \Program Files\Visual Studio på aktuell enhet/disk cd /d %SystemRoot% Byter aktuell mapp till Windows NT:s systemmapp och aktuell enhet till startvolymen//boot partition (oftast c:\winnt) Förbättringar i For Kommandot For har genomgått en omfattande förbättring. Med Command Extensions påslagna kan For användas för att: q Genomlöpa mappnamn i stället för filnamn med växeln /D q Läsa och dela upp innehållet i filer för att vidare hantering med växeln /F q Utföra ett kommando ett visst antal gånger med växeln /L q Genomlöpa mappträd med växeln /R Filnamn i For-kommando kan delas upp på samma sätt som kommandoradsargument. Kommando %~fi med filtillägg) %~di %~pi %~ni Innebörd Hela sökvägen (enhet/disk, mappar, filnamn Enheten/disken Sökvägen Filnamnet 631

17 Net.Exe, kommandofiler, Windows Scripting Host och perl %~xi Filtillägget %~sni Korta filnamnet (8.3) %~sxi Korta filtillägget (8.3) %~$Miljövariabel:i Hela sökvägen (söker filnamnet i sökvägar angivna i miljövariabeln) Dessa underkommandon gör att du inte kan använda bokstäverna (f, d, p, n, x, s) som variabler. Variabler i For-kommandon måste ha dubbelt procenttecken i en kommandofil När du använder For i kommandofiler måste procenttecknet dubbleras. För att skriva ut hela mappträdet från en kommandofil skriver man (se mer nedan): for /r %%i in (\) do @echo %%~fi Genomlöpa mappnamn i stället för filnamn (/D) Kommandot For /D %a in (.\*) Do Dir %a gör att kommandot dir utförs i alla undermappar till den aktuella mappen. Läsa filer och dela upp innehållet (/F) Växeln /F är den kraftfullaste, med dess hjälp kan filer läsas och innehållet på varje rad i filen delas upp och tolkas oberoende av varandra. Det är också möjligt att använda For på resultatet av ett visst kommando. Skrivsätt (syntax): For /F "tillval" %variabel In (filnamnsmängd) Do kommando Där filnamnsmängd är ett eller flera filnamn (jokertecken är tillåtna). Varje fils innehåll läses och kan användas i kommando. For delar automatiskt (så gott den kan) upp filens rader i smådelar (tokens) så att man kan använda varje del för sig. Vad gäller tillval kan dessa vara en eller flera av: Tillval Innebörd eol=tecken Vilket tecken som skall vara radslutstecken (behövs endast om vanligt radslut inte används). skip=antal rader som överhoppas Antal rader som hoppas över i 632

Kommandospråket i Windows NT är större än i MS-DOS filen innan rader börjar delas upp i smådelar. delims=åtskiljare (i stället för mellanslag och tabbtecken) Om mellanslag och tabbtecken inte används för att skilja smådelar (tokens) från varandra kan man här ange annat tecken. tokens=x, y, m-n* Anger vilka tokens (med nummer) som skall användas i kommandot, asterisken motsvarar resten av raden. Ett exempel (från hjälptexten), med detta kommando: For /F "eol=; skip=1 tokens=2, 3* delims=, " %i In (EnFil.Txt) Do @echo %i %j %k hoppas den första raden i EnFil.Txt över och sedan delas raderna upp (fr.o.m. den andra raden). Rader som börjar med semikolon kommer inte med och inte heller text efter semikolon på en rad (om du inte använder asterisken). Token nummer två och tre används (samt resten på raden). Kommatecken och mellanslag uppfattas som åtskiljare. Om innehållet i EnFil.Txt är detta: Första raden hoppas över Andra raden är den första som kommer att tolkas Tredje raden innehåller ett semikolon; text efter detta tolkas inte ; Rader som börjar med semikolon tas inte alls med Den sis,ta raden Kommer satsen ovan att ge detta resultat: raden är den första som kommer att tolkas raden innehåller ett semikolon; text efter detta tolkas inte sis ta raden När For används på resultatet från ett kommando skrivs kommandot inom parenteserna (där filnamnsmängden annars anges). Windows NT startar en osynlig kopia av Cmd.Exe och låter denna utföra kommandot, utskriften från kommandot behandlas sedan av For som en fil. För att visa en lista över namnen på alla miljövariabler skriver du (hämtat från Help For): 633

17 Net.Exe, kommandofiler, Windows Scripting Host och perl For /F "delims==" %i In ('set') Do @echo %i Jag använder For /F när jag kopierar ändrade filer från min dator till vår server. När jag gör det vill jag att mapparna kopieras i omvänd bokstavsordning (då kopieras min elpostfil sent, den är tillräckligt stor för att jag inte skall vilja vänta på den för att se om andra filer kopieras). Kommandot jag använder ser ut så här: for /f "delims=\" %i in ('dir /b /ad /o-n d:\arbete') do xcopy "d:\arbete\%i" "\\sleipner\duplex%i\" /d /f /h /s /v /z Tillägget delims=\ är nödvändigt för att klara mappnamn med mellanslag. Omvända snedstreck är förbjudna i mappnamn så det kändes säkert att använda. Du kan använda For i flera steg. Antag att du vill veta mer om alla datorer som just nu är anslutna till en server. Satsen for /f %i in ('net session^ find "\"') do net view %i kommer att visa information (net view \\datornamn) för alla anslutna datorer (net session). (^ find "\" behövs för att filtrera bort rader som inte innehåller datornamn.) Skulle du vilja stänga alla filer på din dator som är öppna via nätverket använder du satsen (det är lättare att göra med Serverhanteraren//Server Manager): for /f "skip=4 eol=t" %i in ('net file') do net file %i /close kommandot hoppar över fyra rader och behandlar sedan varje rad tills den stöter på en rad som börjar med T, vilket fungerar på engelsk Windows NT. I svensk Windows NT skall det vara eol=k i stället. Bokstäverna K och T kommer från sista raden i svaret från Net File: Kommandot utfört//the command completed successfully Ytterligare ett exempel: vill du studera alla utdelade resurser på alla datorer i en domän eller arbetsgrupp använder du satsen: for /f "skip=3 eol=t" %i in ('net view /domain:namn på domän eller arbetsgrupp') do net view %i Du måste ange namnet på domänen/arbetsgruppen där det står namn på domän eller arbetsgrupp. Om du matar vidare det som kommer från kommandoraden ovan till en fil har du dokumenterat alla utdelade resurser i domänen/arbetsgruppen 634

Kommandospråket i Windows NT är större än i MS-DOS utan alltför stor ansträngning. Utföra ett kommando ett visst antal gånger (/L) För att utföra ett kommando ett viss antal gånger använder du växeln /L (loop) till For. Den används på detta sätt: For /L %i In (start, step, end) Do kommando Där start, step och end motsvarar första värde, stegvärde och sista värde. Exempel: For /L %i In (1, 3, 18) Do @echo %i Kommer att skriva sex rader till skärmen där siffrorna 1, 4, 7, 10, 13 och 16 står ensamma på varsin rad. Det går också bra att räkna nedåt: For /L %i In (18, -3, 1) Do @echo %i Detta For-kommando skriver också sex rader till skärmen, denna gång med siffrorna 18, 15, 12, 9, 6, 3 först på varsin rad. För att se alla felmeddelanden från Net använder du följande kommando: for /l %i in (1, 1, 9999) do @net helpmsg %i För att spara dem till en fil använder du följande kommando: for /l %i in (1, 1, 9999) do echo %i>>netmedd.txt && net helpmsg %i>>netmedd.txt När felnummer som inte används träffas på kommer Net.Exe att skriva ett meddelande om detta till skärmen vilket gör att filen kommer att innehålla många rader med endast felnummer. Dessa måste du själv ta bort. Det högsta felnumret i Windows NT 4.0 med Service Pack 3 är 6118, men det kommer säkert till nya med framtida Service Pack och Windows NT 5.0. Det minsta tal du kan ange till For /L är -2 147 483 648 och det största +2 147 483 647. Genomlöpa mappträd (/R) Med hjälp av växeln /R kan kommandon utföras i varje mapp i ett mappträd (hela eller delar av trädet). Kommandot for /r %i in (\) do @echo %~fi skriver ut hela mappträdet på den aktuella disken till skärmen, 635

17 Net.Exe, kommandofiler, Windows Scripting Host och perl en mapp på varje rad. Har du behov av en lista med samtliga filer på aktuell enhet kan du lätt få det med kommandot: for /r %i in (\*.*) do @echo "%~fi" Citattecknen runt %~fi gör att filnamnen skrivs ut omgivna just av citattecken, vilket kan göra dem lättare att använda i nästa steg (om de innehåller mellanslag). Räkna lokala användarkonton Det går att använda For /F för en hel del ändamål räkna användarkonton är bara ett av dem. Resultatet blir i detta fall inte perfekt, men förhoppningsvis tillräckligt bra för dig. Denna gång använder vid både For och verktyget Find och måste därmed mellanlagra resultatet i en fil. Det enklaste är alltså att du gör en kommandofil med följande innehåll: del Users.Txt for /F "skip=4 tokens=1,2,3" %%i IN ('net user') do @echo %%i>>users.txt && echo %%j>>users.txt && echo %%k>>users.txt find /v /n /i "on."<users.txt Om du använder kommandot Net Users i en kommandotolk ser du att användarkontona skrivs ut tre stycken per rad. Därför använder jag tokens=1,2,3 i for-satsen. Den sista raden kommer ofast inte innehålla just tre användarkonton varför du måste kontrollera utskriften (de två sista raderna (tre i engelsk Windows NT) härrör från Net-kommandot, Kommandot slutfört//the command completed successfully). En varning: skulle du ha kontonamn som innehåller mellanslag kommer de att räknas som flera konton och dölja andra. Antalet konton blir då lätt fel. Räkna användarkonton i domänen Användarkonton i domänen räknar vi på snarlikt sätt som ovan du behöver endast lägga till växeln /domain till kommandot net user: net user /domain 636

Kommandospråket i Windows NT är större än i MS-DOS Räkna lokala grupper Vi räknar lokala grupper på samma sätt som användarkonton, med ett tillägg till For-satsen: del LoclGrps.Txt for /F "delims=* skip=4 tokens=1,2,3" %%i IN ('net localgroup') do @echo %%i>>loclgrps.txt && echo %%j>>loclgrps.txt && echo %%k>>loclgrps.txt find /v /n /i "on."<loclgrps.txt När du använder kommandot Net LocalGroup ser du att alla gruppnamn föregås av en asterisk. Vi använder den som skiljetecken eftersom det inte är ovanligt att gruppnamn innehåller mellanslag. Samma slutmeddelande från Net-kommandot stör även här du måste minska antalet grupper med två eller tre (kontrollera noga). Räkna globala grupper Vi räknar globala grupper på samma sätt som lokala grupper, det är endast Net-kommandot som skiljer: del GlobGrps.Txt for /F "delims=* skip=4 tokens=1,2,3" %%i IN ('net group') do @echo %%i>>globgrps.txt && echo %%j>>globgrps.txt && echo %%k>>globgrps.txt find /v /n /i "on."<globgrps.txt När du använder kommandot Net LocalGroup ser du att alla gruppnamn föregås av en asterisk. Vi använder den som skiljetecken eftersom det inte är ovanligt att gruppnamn innehåller mellanslag. Kontrollera antalet. Räkna utdelade resurser Att räkna antalet utdelade resurser sker på nästan samma sätt: del Shares.Txt for /f "skip=4 tokens=1" %%i in ('net share') do @echo %%i>>shares.txt find /v /n /i "on."<shares.txt Eftersom vi endast intresserar oss för antalet resurser spelar 637

17 Net.Exe, kommandofiler, Windows Scripting Host och perl det ingen roll om resursnamnen innehåller mellanslag eftersom Net Share alltid skriver en resurs per rad. Studera när användare senast ändrade lösenord Kommandot net user kontonamn gör att en hel del information om användarkontot visas, bland dem uppgift om när lösenordet senast ändrades, om kontot är aktivt och senaste inloggningstid. För att studera tid för senaste ändring av lösenordet för alla konton i den lokala kontodatabasen skriver du (svensk Windows NT): for /f "skip=4 tokens=1,2,3" %i in ('net user') do @echo %i && net user %i find /i "lösenordet senast ändrat" && echo %j && net user %j find /i "lösenordet senast ändrat" && echo %k && net user %k find /i "lösenordet senast ändrat" För engelsk Windows NT ändrar du litet: for /f "skip=4 tokens=1,2,3" %i in ('net user') do @echo %i && net user %i find /i "password last set" && echo %j && net user %j find /i "password last set" && echo %k && net user %k find /i "password last set" Tyvärr upptäcker du här att programmet Net.Exe är skrivet in the U.S. of A.: dess datumformat är alltid det som används i USA, oavsett vilka inställningar du gjort. Detta är litet skumt eftersom du måste använda det inställda datumformatet när du upprättar användare med samma net user-kommando. Studera när användare senast loggade in För att studera senaste inloggningstid för alla konton i den lokala kontodatabasen skriver du (svensk Windows NT): for /f "skip=4 tokens=1,2,3" %i in ('net user') do @echo %i && net user %i find /i "senast inloggad" && echo %j && net user %j find /i "senast inloggad" && echo %k && net user %k find /i "senast inloggad" För engelsk Windows NT ändrar du litet: for /f "skip=4 tokens=1,2,3" %i in ('net user') do @echo %i && net user %i find /i "last logon" && echo %j && net user %j find /i "last logon" && echo %k && net user %k find /i "last logon" 638

Kommandospråket i Windows NT är större än i MS-DOS Förbättringar i If If-kommandot har fått tre nya förbättringar, det kan användas för att: q Jämföra två strängar (samt ange att jämförelsen skall vara skiftlägesokänslig) q Undersöka version av Command Extensions med den inbyggda variabeln CmdExtVersion q Använda förekomst av en viss miljövariabel (inte dess innehåll) Jämföra två strängar If [/I] "första strängen" jämförare "andra strängen" kommando där jämförare är en av: Equ Neq Lss Leq Gtr Geq lika med inte lika med mindre än mindre än eller lika med större än större än eller lika med Växeln /i är i sig en fantastisk liten nyhet: den innebär att de olika strängarnas blandning av små och stora bokstäver inte spelar någon roll (skiftlägesokänslig//case insensitive). Avgöra om en viss miljövariabel finns Underkommandot Defined till If-kommandot används för att avgöra om en viss miljövariabel finns, det är alltså inte dess innehåll som är intressant. Skrivsätt: If Defined miljövariabel kommando Avgöra version av Command Extensions Den inbyggda funktionen CmdExtVersion innehåller versionsnumret för Command Extensions. Du kan inte använda den som en variabel utan den jämförs med ett önskat versionsnummer. 639

17 Net.Exe, kommandofiler, Windows Scripting Host och perl För att inte av misstag använda en miljövariabel med samma namn kan du skriva så här: If Defined CmdExtVersion set CmdExtVersion= If CmdExtVersion 1 kommando Miljövariabeln CmdExtVersion tas alltså först bort (om den finns) och sedan används den inbyggda funktionen CmdExt- Version. Använda %ErrorLevel% Med skrivsättet %ErrorLevel% kan ErrorLevel användas för olika ändamål, ex. för att hoppa till olika ställen i en kommandofil. Följande exempel (från hjälptexten) visar hur %ErrorLevel% kan användas: choice goto answer%errorlevel% :answer0 echo You typed Y for yes :answer1 echo You typed N for no CmdCmdLine innehåller ursprunglig kommandorad för Cmd.Exe Den nya miljövariabeln CmdCmdLine innehåller den ursprungliga kommandoraden för Cmd.Exe Förbättringar i Shift Shift har fått en ny växel /n vilken gör att argumentet med numret som anges av n och de följande skiftas, men inte de som föregår argument n. Exempel: om du skriver Shift /3, kommer argument nummer 4 att skiftas till position 3 (%3), nummer 5 till position 4 (%4), o.s.v. Kom ihåg: argument noll (%0) skiftas aldrig, det innehåller namnet på kommandofilen (det filnamn och kanske sökväg du skrev i kommandotolken för att starta kommandofilen). 640

Kommandospråket i Windows NT är större än i MS-DOS Förbättringar i Start Numera kan du skriva Start Filnamn.Filtillägg om filtillägget är registrerat på ett program. Start Mappnamn gör att mappen öppnas i Windows NT-utforskaren//Windows NT Explorer. Förändringar som kanske inte är uppenbara Några av de förbättringar som gjorts är kanske inte uppenbara i sina användningsområden. Du kan få en kommandofil att skriva sitt filnamn (hela sökvägen) när den körs genom att ha kommandot echo %~f0 i kommandofilen. Detta bidrar till felsökning om du har många kommandofiler och inte vet vilken som gjort vad. Lägg in kommandon liknande dessa i dina kommandofiler:... echo.>>%systemroot%\logs\commandfiles.log echo Nu kör %~f0>>%systemroot%\logs\commandfiles.log echo. date>>%systemroot%\logs\commandfiles.log echo. time>>%systemroot%\logs\commandfiles.log... så kommer loggfilen CommandFiles.Log att innehålla rader som entydigt talar om vilka kommandofiler som körts och när. Lura verktyg som kräver att du bekräftar ditt val Det är inte ovanligt att verktyg i Windows NT kräver att du bekräftar ett val genom att skriva in j//y eller bara trycka på Enter på tangentbordet. Två sedan länge använda knep är att använda kommandot echo tillsammans med pipe-funktionen för att skicka ett j//y eller Enter till kommandot. Du såg ovan hur den ena formen användes tillsammans med CACLs.Exe. Den andra formen är användbar med andra kommandon, exempelvis kommandot time. Önskas aktuell tid utskriven i en kommandotolk skriver du: echo. time Windows NT svarar då (det blir inte alltid samma tid): The current time is: 12.58.19,51 Enter the new time: 641

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Skillnaden är att den inte stannar och väntar på din inmatning av tiden utan den får en radmatning från echo-kommandot. Windows Scripting Host När jag först hörde talas om Windows Scripting Host, WSH, och vad man skulle kunna göra med den, var jag inte riktigt säker på att jag förstod. Windows Scripting Host var tydligen ett sätt att använda en sorts avancerade kommandofiler hade inte utvecklingen lämnat dessa för länge sedan?! Tydligen inte Windows Scripting Host är en värdmiljö för skriptmotorer, vilka skript som helst skall kunna användas så länge det finns en motor som kan installeras i Windows Scripting Host. För mig som hackat kommandofiler i alla år var detta en mycket välkommen nyhet framför allt som Windows Scripting Host har en kommandoradsdel också. Windows Scripting Host är en del av Windows NT Option Pack 1 (det finns bara ett Option Pack, men tänk om det kommer fler). Microsoft skickar med två skriptmotorer i Windows Scripting Host: VBScript (Visual Basic Script) och JScript (Microsofts JavaScript). Jag har ingen egen erfarenhet av Java eller JavaScript, men allt jag skriver nedan om VBScript torde vara tillämpligt även på JScript i WSH. Dessutom verkar det som om Microsoft faktiskt satsar hårdast på JScript. Windows Scripting Host är två systrar Windows Scripting Host är två program: q WScript.Exe grafiskt Win32-program q CScript.Exe kommandoradsprogram Vilket snabbt inses används WSCript.Exe i Windows och CScript.Exe i kommandotolken. De är skrivna så att båda kan köra samma skript. När du använder CScript.Exe inträffar det lustiga att ex. dialogrutor i skriptet kommer att visas i den grafiska miljön. Microsoft har skickat med ett antal exempelfiler, fiffigt nog i både VBScript och JScript för att visa exempel på deras användning. Riktigt intressant blir WSH tillsammans med Active Directory Services Interface, ADSI, vilket är en API-samling för Active 642

Windows Scripting Host Directory (Services), ADS, i Windows NT 5.0. Det finns två exempel på detta i den lilla exempelsamling som Microsoft har på http://www.microsoft.com/scripting/vbscript. Exemplen AddUsers och DelUsers använder Excel-ark för att hantera användare i ADS. ADSI och VBScript i Windows NT 4.0 Förmodligen vill du inte basera din administration på betaversioner, men det finns möjlighet att prova ADSI redan idag, med Windows NT 4.0. På Microsofts webb-ställe finns senaste versionen av ADSI (2.0 när detta skrevs) vilken du kan installera på en testdator. Skillnaden mellan ADSI i Windows NT 5.0 och Windows NT 4.0 är att du inte använder Lightweight Directory Access Protocol, LDAP, i Windows NT 4.0 utan egna API:er. Det fiffiga med ADSI är att det ingår koppling till API:erna i Windows NT 4.0. Med en del möda knåpade jag ihop följande exempelprogram i VBScript: ' Visa alla domäner och objekt i domäner. ' ' 23 Mar 1998 Rolf Åberg Option Explicit Dim nsads Set nsads = GetObject("WinNT:") Dim objdomain Dim objdomobject For Each objdomain In nsads WScript.Echo nsads.name & objdomain.name Next For Each objdomobject in objdomain WScript.Echo nsads.name & objdomain.name _ & "/" & objdomobject.name Next WScript.Quit(0) När du kör skriptet räknar det upp alla domäner och alla objekt (användarkonton, grupper och datorer) i alla domäner. 643

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Programmet kräver att du installerat ADSI 2.0 och WSH. ADSI finner du på Microsofts webb-ställe. Använda VBScript i Windows Scripting Host Det märks ganska tydligt att tekniken bakom Windows Scripting Host håller på att mogna. Jag minns inte längre hur lång tid det tog innan jag hittade hur man gör för att skriva en text till skärmen i kommandotolken. Det visade sig vara ett objekt vid namn WScript som kan sådant. Dess metod Echo gör att texten skrivs till kommandotolken och inte grafiskt. Kör denna sats med CScript.Exe: WScript.Echo "Hej världen!" skrivs texten Hej världen! i kommandotolken. Ett enkelt VBScript som visar information för inloggad användare Med ett litet lån från exempelprogrammet network.vbs kan detta program tillverkas: ' Visa aktuell användare, m.m. Lånat vissa delar ' från Microsofts exempelprogram. ' ' 23 Mar 1998 Rolf Åberg Option Explicit WScript.Echo Dim onetwork Set onetwork = WScript.CreateObject("WScript.Network") WScript.Echo "UserDomain : " & onetwork.userdomain WScript.Echo "UserName : " & onetwork.username WScript.Echo "ComputerName: " & onetwork.computername WScript.Quit(0) När programmet körs i CScript.Exe skrivs en hel del information om WSH, den inloggade användarens domän, användarnamn samt datornamnet. Objektet WScript är intressant. Det har följande egenskaper: 644

Perl (Practical Extraction and Report Language) Egenskap Application Arguments FullName Name Path ScriptFullName ScriptName Version Beskrivning IDispatch-namnet för WScript (COM) Objektsamling (collection) som innehåller kommandoradsargument för skriptet Sökvägen till WScript.Exe/CScript.Exe Namn på WScript.Exe/CScript.Exe Mapp för WScript.Exe/CScript.Exe Sökvägen till det skript som körs Filnamnet för det skript som körs Versionsnummer för Windows Scripting Host ScriptName och Version torde vara användbara vid felsökning. Perl (Practical Extraction and Report Language) Programspråket perl är ganska nytt för Windows NT, men det har funnits några år i Unix-världen. Perl uppfanns av en lätt galen man vid namn Larry Wall (läs något han skrivit så förstår du varför jag kallar honom lätt galen) när han fått i uppdrag att tillverka en rapportgenerator. I stället för en rapportgenerator tillverkade han perl. Perls stora styrka är dess möjligheter att dela upp textfiler i hanterliga delar, leta information i textfiler och byta ut textdelar mot ny text. En av de grundläggande tankarna bakom perl är att de som använder perl skall få göra som de vill: den som vill att allting skall deklareras före användning kan göra så, den som vill köra på utan hängslen och livrem kan göra det. Alla perl jag hört talas om har varit tolkande varianter programmet körs i en miljö (precis som WSH och VBScript/JScript). Gissningsvis kommer du att kunna göra samma saker (med en viss reservation) från perl som i VBScript/JScript. Du kan alltså välja fritt mellan dem. På http://www.activestate.com finner du en gratisversion av perl för Win32. Den följer också med i Windows NT Resource Kit. Den enda perl-bok du behöver är skriven av Larry Wall, Tom Christiansen och Randal Schwartz, den heter Programming Perl, 645

17 Net.Exe, kommandofiler, Windows Scripting Host och perl 2 nd Edition och är utgiven av O Reilly & Assoc. 1996 (ISBN 1-56592-149-6, 646 sidor). Smaka på perl Ett väldigt enkelt perl-program: print "Hej världen!\n" ; skriver naturligtvis texten inom citattecken till skärmen när du startar perl-tolken och skriver in texten (eller först sparar den till en fil som du anger på kommandoraden till perl-tolken). Om du bara skriver perl på kommandoraden startar perl-tolken och väntar på att du skriver in något. Variabler är lätta att använda. Variablerna märks med ett prefix för att markera vilken typ de är (perl vandlar lätt om mellan olika typer om det behövs). Programmet nedan gör samma sak som det ovan, men nu använder vi en variabel: $HelloMess = "Hej världen!\n" ; print $HelloMess ; Dollartecknet betyder att detta är en skalär variabel (i motsats till en fältvariabel), inte att den är en strängvariabel. Du kanske undrar över \n som står innanför citattecknen? Det är ett litet lån från programspråket c. Det omvända snedstrecket gör att n tolkas som ny rad (eng. new line). Varje sats i perl avslutas med ett semikolon (utom den sista i ett block, men det struntar vi i). Perl kan läsa från kommandoraden: print "Antal varv: " ; chop ( $NumIters = <>) ; print "Genomlöper slingan $NumIters varv.\n" ; Här ser du exempel på kraftfulla saker i perl, <> är en kortform för inmatningsbufferten (<STDIN> är ett längre skrivsätt). Funktionen chop hugger av den radmatning som hamnar i inmatningsbufferten när vi matar in det värde programmet ber om i första raden. I den sista satsen ser du vad enkelt det är att skriva ut variablers innehåll i perl. Ett par perl-exempel Perl-programmet nedan genomlöper och skriver ut namn och innehåll för alla miljövariabler, de finns i samlingen ENV 646

Perl (Practical Extraction and Report Language) (%-tecknet anger att det är en samling (hash i perl). Raden use strict 'subs' gör perl-tolken petig så att den hjälper mig när jag missar. # Skriver alla miljövariabler, värdet före namnet # # 6 sep 1996 Rolf Åberg use strict 'subs'; $time = localtime ; print "Perl script file ", FILE, " running on $time...\n\n"; while (( $key, $value) = each %ENV) { print "$value = $key\n"; } Nästa perl-program visar information för användarkonton, namnet på kontot fås av användaren vid körning. # Prints information for user account. # # 2 May 1997 Rolf Åberg use strict 'subs'; $time = localtime ; print "Perl script file ", FILE, " running on $time...\n\n"; use Win32::NetAdmin; # get info for the user. print "User Account Name: "; chop ($UserName = <>); Win32::NetAdmin::UserGetAttributes('',$UserName, $GetPassword, $GetPasswordAge, $GetPrivilege, $GetHomeDir, $GetComment, $GetFlags, $GetScriptPath) warn(); print "User: $UserName, $GetPassword, $GetPasswordAge, $GetPrivilege, $GetHomeDir, $GetComment, $GetFlags, 647

17 Net.Exe, kommandofiler, Windows Scripting Host och perl $GetScriptPath\n"; Perl är ett mycket intressant språk med många möjligheter jag har inte ens visat hur enkelt det är att leta efter viss text i en fil, låt mig avsluta med ett sådant exempel. Programmet ber om ett filnamn och en text, öppnar filen och räknar antal gånger texten förekommer i filen. # Ber om filnamn och textsträng. Öppnar filen och räknar # antalet instanser av textsträng. Textsträngen görs om till # små bokstäver och även filens rader för jämförelse. # # 14 maj 1997 Rolf Åberg use strict 'subs'; $time = localtime ; print "Perl-program ", FILE, ", körs $time...\n\n"; print "Filnamn: " ; chop ($FileName = <>); print "Räkna förekomster av: "; chop ($CountInstancesOf = <>); # Till små bokstäver. $CountInstancesOf = lc($countinstancesof); open( InpFile, $FileName); $NumFound = 0; while ( $InpLine = <InpFile> ) { if ( lc( $InpLine) =~ /$CountInstancesOf/ ) { $NumFound++; }; }; print "Fann '$CountInstancesOf' på $NumFound "; print "ställen i $FileName.\n"; Hjälpfrågor 1. Hur används verktyget Net.Exe? 2. Hur kan du göra för att se vilka kommandon som omfattas av 648

Hjälpfrågor Command Extensions i Windows NT 4.0? 3. Tecknen <, >, och är speciella när de används i en Kommandotolk//Command Prompt. Hur gör om du vill använda ett av dem som de är, utan denna speciella funktion? 4. Aktuell mapp är d:\arbete. Vad händer om du i en Kommandotolk//Command Prompt skriver cd /d e:\temp (vi antar att mappen e:\temp verkligen finns)? 5. Vad händer om du i en Kommandotolk//Command Prompt skriver cd /d %systemroot%? 6. Vad gör kommandot For /F "delims==" %i In ('set') Do @echo %i? 7. Vad är Windows Scripting Host och vad kan den användas till? 8. Vad är perl och vad kan du använda det till? 9. Vad är LDAP? 10.Vad är Active Directory Services Interface, ADSI? 11.Vad innebär kommandot net accounts avgivet i en kommandotolk? 12.Hur gör du för att få veta mer om ett Net-kommando? 649

17 Net.Exe, kommandofiler, Windows Scripting Host och perl Förslag till svar på frågor 1. Hur används verktyget Net.Exe? Net.Exe är ett kommandoradsverktyg, man måste alltså först öppna en Kommandotolk//Command Prompt innan man kan använda Net.Exe. Net.Exe kan ses som en kommandotolk, d.v.s. den förstår ett antal olika kommandon som skrivs till den. Som vanligt med kommandotolkar är det noga med stavning av argument och växlar. Net.Exe tillsammans med, ex., Excel gör att man kan utföra mycket omfattande uppgifter med kommandofiler. 2. Hur kan du göra för att se vilka kommandon som omfattas av Command Extensions i Windows NT 4.0? För att se vilka kommandon som omfattas av Command Extensions i Windows NT 4.0 startar man en Kommandotolk//Command Prompt och skriver sedan help cmd (följt av Enter). 3. Tecknen <, >, och är speciella när de används i en Kommandotolk//Command Prompt. Hur gör om du vill använda ett av dem som de är, utan denna speciella funktion? För att slå av specialbehandlingen av <, >, och, skriver man ett cirkumflextecken, ^, (tak) före dem. Ex. för att skriva (eka) texten 1 < 3 till skärmen från en kommandofil skriver man echo 1 ^< 3 i kommandofilen. 4. Aktuell mapp är d:\arbete. Vad händer om du i en Kommandotolk//Command Prompt skriver cd /d e:\temp (vi antar att mappen e:\temp verkligen finns)? Tack vare den nya kommandoradsväxeln /d kommer aktuell mapp att bli e:\temp och aktuell enhet kommer att bli e: (Windows NT byter till den enheten). 650

Förslag till svar på frågor 5. Vad händer om du i en Kommandotolk//Command Prompt skriver cd /d %systemroot%? Oavsett vilken mapp som var aktuell kommer aktuell mapp att sättas till Windows NT:s systemmapp och aktuell enhet till den enhet som systemmappen finns på (startvolym//boot partition). 6. Vad gör kommandot For /F "delims==" %i In ('set') Do @echo %i? Kommandot ovan visar en lista över namnen på alla miljövariabler (inte deras innehåll). 7. Vad är Windows Scripting Host och vad kan den användas till? Windows Scripting Host, WSH, är ett nytt verktyg (finns i Windows NT 4.0 Option Pack). WSH är en skriptmotor och levereras med tolkar för Visual Basic Scripting Edition (VBScript) och JScript (JavaScript från Microsoft). Tanken med WSH (och dess kommandoradssyster CSH) är att all administration av Windows NT 4.0 och Windows NT 5.0 skall vara möjlig att sköta med hjälp av skript. 8. Vad är perl och vad kan du använda det till? Perl är ett programmeringsspråk (hittills implementerat enbart som tolkande språk). Perls stora styrka är dess möjligheter att dela upp textfiler i hanterliga delar, leta information i textfiler och byta ut textdelar mot ny text. En av de grundläggande tankarna bakom perl är att de som använder perl skall få göra som de vill: den som vill att allting skall deklareras före användning kan göra så, den som vill köra på utan hängslen och livrem kan göra det. Perl kan, och kommer att kunna, användas för att mekanisera delar av administrationen vilket gör att perl och WSH delvis konkurrerar om samma uppgifter. Gissningsvis finns det plats för båda. 9. Vad är LDAP? Lightweight Directory Access Protocol, LDAP är ett protokoll för hantering av katalogtjänster. LDAP har sina rötter i arbetet med X.500. I Microsoft Active Directory Services kommer LDAP att vara det föredragna (och av Windows NT 651