AD objekthantering med Batch

Som systemadministratör oftast har man varierande arbetsuppgifter exempelvis att återställa lösenord och behörigheter, modifiera användarens display namn, gruppmedlemskap, etc. Det ingår också att redovisa användarnas åtkomst till nätverksresurser, antal gånger något fel inträffar, objektgranskning, osv.

Alla dessa arbetsuppgifter kan vara svåra att utföra med hjälp av ett grafiskt hanterare eftersom man behöver klicka många gånger för att utföra en enskild uppgift, men det finns andra arbetssätt. Kommandobaserad administration underlättar systemadministrationen ifall man vill hantera flera objekt samtidigt. Om man vill automatisera administrationen ska kombineras kommando och script.

Ett script innehåller många instruktioner för kommandoexekveringar på ett visst sätt. Ett exekveringssätt är Microsofts Batch File eller Linux Bash. Dessa två kommandotolkare klassas som ”Shell script” eller enklare sagt script.

Batch File

Batch File eller bara Batch är en Windows programmering språk och därför kan de hanteras med enkla editorer som Notepad, Wordpad eller liknande. En Batch script innehåller flera kommandon organiserade i rader och i sekvenser som utför ett vist arbete i ett Windows system.

Det finns två olika körningssätt av Batch skrypt: Interactive och Silent (Batch).

  • Interactive – När en Batch script exekveras kräver ett manuellt datainmatning. Den kräver att användaren interagerar med scripten genom att svara till exempel frågor som ”Are you sure”, yes or no.
  • Silent/Batch – När en Batch script exekveras kommer den att utföra alla kommando utan någon användares inblandning.

Batch operatörer

Precis som vilken andra programmeringsspråk har Batch sina egna operatörer.

Operatorer Beskrivning
 + Aritmetiska operatörer
 –
 *
/
%
 ! Sammanfogning av kommando
 ~
< Omdirigerar output
>
 = Tilldelning
 *=
 /=
 %=
 +=
 -=
&&  För att köra flera kommando
 |  För att pipa resultat av ett kommando till ett annat.

Några användbara kommando

Det finns i princip två olika typer av kommando, interna och externa. Interna kommando är de som är redan inbyggda i Windows OS till exempel echo, cls, del, dir mm. Externa kommandon läggs till i systemet vid nya installationer av olika applikationer. Vissa av dessa kommandon kan exekveras från Run fältet och endast några av dem vid kommandoprompt.

Kommandona är sällan ensamma, oftast körs de tillsammans med underkommando, växlingar/tillägg och parametrar.

c:\>net users

Huvudkommando är net och underkommando är users, de ska köras tillsammans.

Växlingar eller switchar kompletterar kommandoutförande:

c:\net user ChaloReyes P@ssw0rd /add

Huvudkommando är net, underkommando är user, ChaloReyes och lösenordet är parametrar, /add är växling eller tillägg.

Parametrar

Det som definieras direkt på kommandoprompt kallas för parametrar. Ibland vad man anger direkt på kommandoprompt kallas för ”argument”. Som illustration kan vi skapa en Batch script som använder ett parameter som ”argument”

Öppna Notepad och skriv ner följande rader

@echo off
cd\
echo ”Welcome %1
pause

Spara dokumentet som en bat fil med namn welcome.bat
Se till att i filtyp fältet står Alla filer, annars sparas dokumentet som textfil och inte som en exekverbar fil!

På kommandoprompt placera dig i den platsen bat-filen har sparats och skriv nedan:

c:\welcome.bat Chalo

Observera att vi har kodat ett parameter som %1 så att användaren själv skulle ange parametern vi exekvering av scriptet. Formatet %nummer kan användas för att ersätta med något input.

Rem

Med detta kommando kan man lägga kommentarer eller kommentera bort någon rad. Som exempel skapar vi en skrypt där vi lägger en kommentar:

@echo off
Rem Program for printing hello world
Echo Hello World
pause

Echo

Kommandot används för att visa text som följer efter ett kommando exempelvis:

c:\echo Hello World

Om du kör endast echo kommer kommandot att visa om echo är på eller av. Som default echo är alltid på men oftast aktiveras det av just för att undvika text som följer efter ett kommandoutförande. Detta görs med kommando echo off och den aktiveras med echo on.

Color

Kommandot styr bakgrundsfärg och föregrundsfärg. Genom att använda särskilda koder kan bestämmas dina favorit färg. Här nere listas några av koderna:

Hexadecimal kod – Namn
0 – black
1 – blue
2 – green
3 – aqua
4 – red
5 – purple
6 – yellow
7 – white
8 – gray
9 – ligth blue
A – ligth green
B – ligth aqua
C – ligth red
D – ligth purple
E – ligth yellow
F – brigth white

För att ändra farg på kommandoprompten exekvera:

c:\>color a

Title

Kommandot ändrar namnlista, för att ändra till ChaloReyes CMD exekvera:

c:\>title ChaloReyes CMD

Prompt

Kommandot ändrar tecknet som identifierar prompten. Som default Windows använder större än tecken (>).

För att ändra till ChaloReyes $ : exekvera:

c:\>prompt ChaloReyes $$ :

Start

Kommandot startar tjänster och applikationer, inklusive kan definieras prioritet och om applikationen ska köras tillsammans med alla andra av samma typ eller helt ensam.

Tree

Kommandot visar filsystem i trädformat. Bra när man vill se strukturen till exempel vilka underkatalog finns i en viss huvudkatalog.

Ver – Visar Windows version

Shutdown (fungerar med minus eller slash tecken)

c:\>shutdown /s /t 0
c:\>shutdown /r /t 0

Type – visar textfilers innehåll

Pause – pausar kommandoutförande och visar meddelandet ”Press any key to continue ….”

Miljövariabler

Ordet variabel syftar på en platsreservation för senare användning. I reserverade platser kan lagras olika värde (numerisk eller teststräng). Variabels värde anges antingen av OS eller användare.

  • För att få dator namn exekvera:
    • c:\>echo %computername%
  • För att få den aktuella datum
    • c:\>echo %date%
  • För att flytta exekveringsläge till c:\Windows, exekvera: cd %systemroot%

Loopar

Precis som för andra programmeringsspråk har Batch File möjlighet att exekvera ett antal kommando gång på gång, i ett varv eller loop.

For loop

Här nere listas några av dessa loopar utan någon detaljerade förklaring:

For /D – loopar genom flera kataloger
For /R – loopar genom huvudkatalog och underkataloger
For /L – loopar genom ett antal specificerade numeriska intervaler
For /F – loopar genom flera filer, kommando och strängar

För varje alternativ ovan finns flera olika variationer med hjälp av referenser (mer kod) som inte tas upp här.

  • För att se innehållet av kataloger exekvera:
    • c:\for /D %v IN (*.*) DO dir /s ”%v”
  • Samma kod kommer inte att fungera om den körs via en Batch script, istället kodas så här:
    • c:\for /D %%v IN (*.*) DO dir /s ”%%v”
  • För att skanna lediga portar och därefter kommunicera med de via Telnet exekvera:
    • c:\for /L %g in (1,1,20) do telnet %1 %v
    • Den först etta i parentesen är den initiala värde, den andra etta är värde som ökas varje gång kommandot exekveras och loopen slutar efter 20 varv.
  • För att få fram på skärmen ett numeriskt värde som minskar med 2 enheter varje varv till den blir 2, exekvera:
    • c:\for /L %g in (22,-2,2) do echo %g

Loopen FOR /F är den svårast därför att den använder fler varianter. Vi behöver endast förstå några växlingar:

  • delims=xxx – definierar begränsningar
  • tokens=x,y,m-n – definierar vilka tokens passeras till näst varv, m-n är ett numeriskt interval

För att få fram på skärmen två av fyra tokens och deras värde, exekvera:

  • c:\>for /f ”tokens=1,3* delims=,” %v in (”Gonzalo,Rivera,Teacher,Batch”) do @echo %v is a %w
  • Text som visas är: Gonzalo is a Teacher.

Villkor satsen IF och IF NOT

If satsen kan illustreras med ett exempel där användaren interagerar med scriptet. Öppna Notepad och skriv koden nedan sedan spara filen med ett lämpligt namn.

@echo off
:begin
color a
echo Access Code:
set /p ac=
if %ac%==12345(
echo Access Granted
) else (
echo Access Denied
goto begin
)
Pause

Förklaring:

  • :begin är början av scriptet
  • goto begin betyder att när raderna exekveras startas om scriptet.
  • set /p promptar användare att ange ett värde
  • ac= variabel i vilken lagras när användaren mattar in ett värde.

Felsökning

NET kommando är den som använder mest och den har flera olika underkommandon, alla med egna switchar.

  • För att få fram net kommandots syntax exekvera:
    • c:\>net /?
  • För att få fram befintliga lokala användarkonton exekvera:
    • c:\>net users
  • För att skapa ett nytt lokalt användarkonto exekvera:
    • c:\net users ChaloReyes P@55w0rd /add
  • För att se detaljerad information om et användarkonto exekvera:
    • c:\>net users ChaloReyes
  • För att ändra lösenordet exekvera:
    • c:\>net users ChaloReyes *
      • Type a password for the user:
        Retype the password to confirm:
  • För att radera ett användarkonto exekvera:
    • c:\>net users ChaloReyes /delete
  • För att få fram lokal grupper exekvera:
    • c:\>net localgroup
  • för att skapa en lokalgrupp exekvera:
    • c:\>net localgroup Astar /add /comment:”This the new team instead JB kompetens”
  • För att radera en lokalgroup exekvera:
    • c:\>net localgroup Astar /delete
  • För att få fram alla hostar i det lokala nätet exekvera:
    • c:\>net view
  • För att få fram rätt MTU storlek exekvera
    • c:\>ping yahoo.com -l 1500 -f
      • Det visar att paketet behöver fragmenteras men kan inte göras på grund av flagan DF
    • c:\>ping yahoo.com -l 1490 -f
      • Det visar samma felmeddelande och då minskar med 10 byte tills man får Reply.
    • c:\>ping yahoo.com -l 1470 -f
      • Då ökar man MTU med 1 varje gång tills man får ett felmeddelande och då backar man.
    • c:\>ping yahoo.com -l 1472 -f
      • Reply visas och då MTU = 1472 + 20 + 8 = 1500 bytes (802.3 Ethernet).
        Ping Of Death arbetar så att maximala antal bytes skickas utan flaggan -f (DF) till exempel c:\>ping -l 65550 IP_Adress.
  • För att få fram aktiva uppkopplingar över the nätverk exekvera:
    • c:\netstat -a
  • För att få fram statistik på program som generarar data till/från Ethernet port exekvera:
    • c:\>netstat -b
  • För att få fram statistik på antal byte till/från Ethernet port exekvera:
    • c:\>netstat -e
  • För att få fram routing tabellen exekvera
    • c:\>netstat -r