Signering af scripts

Jeg har flere scripts der kører automatisk i løbet af natten. For at disse kan køre har jeg signeret dem med et kode signerings certifikat. Processen er egentlig ganske simpel, forudsat at du har adgang til sådan et certifikat. Da jeg kører mine scripts i mit eget domæne, er det nemmeste i verden jo at installere en CA og udstede sit eget. (Installation af CA og udstedelse af certifikat, tager vi lige en anden dag. ;) )

Men når du har certifikatet skal du bruge kommandoen Set-AuthenticodeSignature, pege på dit script og dit cert. Kommandoen ser sådan ud:

Set-AuthenticodeSignature “sti til script” -Certificate “sti til certifikat”

Nemt ikke? Lad os forestille os at jeg har lagt scriptet script.ps1 i temp folderen på mit c-drev og jeg kun har 1 certifikat til kode signering, så ser kommandoen således ud:

Set-AuthenticodeSignature C:\Temp\Script.ps1 -Certificate (Get-Childitem Cert:\CurrentUser\My -CodesigningCert)

Og da -Certificate er en positionsbestemt parameter, så er det ikke engang nødvendigt at angive den. Og kommandoen ovenfor kan forkortes til:

Set-AuthenticodeSignature C:\Temp\Script.ps1 (Get-Childitem Cert:\CurrentUser\My -CodesigningCert)

Positionsbestemte parametre er det Powershell forventer der kommer på den position, altså skal certifikatet angives som parameter nr 2 og man kan undlade at angive dette og bare sætte certifikatet ind her.

Igen tror jeg Voila er ordet. ;)

Domæne overblik fra powershell

Domæne class´en er ligesom forest class´en, dog indeholder den en masse information om domænet.. (Big surprise)

I domæne class´en finder man ejeren af domæne rollerne (og vi ved jo alle at det er PDC emulator, RID master og Infrastructure master), domæne controllere, domænets version (mode) og en masse andet. Igen kan vi trække disse informationer ud og modulere dem på kryds og tværs.

Vi skal have fat i class´en først og jeg vil som altid gerne undgå at skrive alt for meget, derfor smider jeg den i en variabel.

 

$Domain = [System.DirectoryServices.ActiveDirectory.Domain]::getcurrentdomain()

For så at få domæne controllere ud af denne liste, kan man skrive:

$Domain.get_domaincontrollers() | fl

Ydermere hvis man ønsker at få både en liste over domæne controllerne og deres operativ system kan man skrive:

$Domain.get_domaincontrollers() | fl name,OSVersion

Så er det trods alt nemmere at dokumentere sit AD. ;)

AD Sites fra powershell

Mangler du et hurtigt overblik over dine AD Sites? Jeg synes ofte jeg roder rundt i Sites and Services og leder. Og man kan sige meget om Sites and Services, men hvis man har 100+ sites så bliver det uoverskueligt. Med powershell er det muligt at trække information om dine sites ud sortere, filtrere og exportere data på kryds og tværs som det nu lyster dig.

For at trække data fra AD omkring dine sites skal vi have fat i forest class. Dette gør jeg normalt ved at lægge den i en variabel, på den måde slipper jeg for at skrive en meget lang class streng igen og igen.

$Forest = [System.DirectoryServices.ActiveDirectory.Forest]::getcurrentforest()

Nu indeholder variablen $Forest vores forest class. For at hente vores sites fra den skrives:

$Forest.get_sites() | fl

Forest class´en indeholder meget mere info, prøv bare at skrive $Forest, frem kommer navn, sites, domæner, gc, forest mode, rod domæne osv.