Script

Ett skript är en textfil som innehåller en eller flera Windows PowerShell kommandon. När du kör skriptet exekveras kommandon precis som om du skrev dem på kommandoraden. Vanligtvis skriver du ett skript för att spara en sekvens av flera kommando som du använder ofta. Skript kan vara lika enkla som ett enskilt kommando eller så komplicerat som en samling av komplexa kommando.

För att konstruera skript kan användas en textredigerare exempelvis Anteckningsblock, eller en skriptredigerare (Script Editor), som Windows PowerShell Integrated Scripting Environment (ISE).  Du skriver kod, du lagrar som text men med ett namn som har filändelse .ps1.

Windows PowerShell Integrated Scripting Environment

Med PowerShell ISE kan du skapa, redigera, köra, testa och felsöka kod i skript i en miljö med stöd för Unicode. Windows ISE låter oss öppna flera sidor där man kan skriva kod, testar koden utan att spara scriptet först. PS ISE visar syntaxen i olika färger samt ett hjälpsystem i vilket visas kompletterande uppgifter. Beroende på hur du själv bestämmer layouten.

Att skapa script i PS ISE är egentligen inte så svårt, man skriver ett eller flera Cmdlet och dess parametrar i skriptredigeringsfönstret. Det kan kombineras med operatörer, lopp, villkorssatser, mm. När man är färdigt med skriptet så klickar man på pilen RUN eller kör och ser man resultatet på PS konsolen. Är man nöjd med resultatet sparar man scriptet med ett lämpligt namn och ändelse .ps1

När man vill exekvera något scritpt från PS konsolen skriver man namnet och därefter trycker på Enter. Det förutsätter att du vet mappen där dina script finns och att du placerar starten på samma mapp. Det går helt klart att konfigurera datorn så att det spelar ingen roll varifrån du exekverar dina script.

För att exekvera script utanför PowerShell räcker att dubbelklicka på skriptet, förutsatt att systemet är konfigurerat för att tillåta exekvering av skript.

Execution policy

Exekvering av skript kräver rätt behörighet. Reglerna som styr exekveringens behörigheter heter på engelska Execution Policy. Fyra olika regler finns i PowerShell:

  • Restricted – tillåter inte exekveringen, undantag i interaktiva sessioner (default för Windows klientsystem)
  • AllSigned – tillåter exekveringen om skript är signerad av förtrodda partner.
  • RemoteSigned – tillåter exekveringen av nedladdade script som är signerade av förtrodda partner, annars inte. Regeln kräver inte digitala signatur för hemgjorda skript.
  • Unrestricted – Tillåter lokala script exekvering. Vid exekvering av nedladdade script från Internet frågas.

Några exempel på enkla skript:

För att få fram ”Execution Policy” exekvera:
PS C:\>Get-ExecutionPolicy
Restricted
För att få fram de olika behörighetsnivåer exekvera:
PS C:\> Get-ExecutionPolicy  -list | ft  -a
Scope                      ExecutionPolicy
MachinePolicy      Undefined
UserPolicy             Undefined
Process                   Undefined
CurrentUser         Undefined
LocalMachine      Undefined
För att ändra Execution Policy Restricted till RemoteSigned exekvera:
PS C:\>Set-ExecutionPolicy  -ExecutionPolicy  RemoteSigned  -Force
För att skapa en katalog (Folder) i c:\VMshares\PS\Scripts\Lab1 via skript:
1 $newFolder = New-Object -ComObject scripting.filesystemobject
2 $newFolder.CreateFolder(”C:\VMshares\PS\Scripts\Lab1”)
Kör skriptet genom att klicka på RUN i PS ISE. Därefter lagra ditt första skript i mappen C:\VMshares\PS\Scripts\Lab1\newFolder.ps1
För att skapa flera kataloger i C:\VMshares\PS\Scripts\ via skript:
1    # newFolders.ps1
2   # Creates subfolders lab2 to lab15 into C:\VMshares\PS\Scripts\
3   # Chalo Reyes, 2018-01-12
4   #
5   for ($i = 2; $i -le 15; $i++)
6   {
7   New-Item -path C:\VMshares\PS\Scripts\ -name ”Lab$i” -itemtype directory
8   }
För att få fram CMDLET som har 2 eller flera alias:
1 # ——————————————-
2 # Name: more2alias.ps1
3 # Author: Chalo Reyes
4 # Date: 2018-01-12
5 # CMDLETS with 2 or more aliases
6 # ——————————————-
7 #
8 Get-Alias |
9 Group-Object -Property definition |
10 Sort-Object -Property count -Descending |
11 Where-Object { $_.count -gt 2 }
För att hitta Microsoft Word dokument större eller lika med 100000 byte:
1   # ————————————————————————
2   # NAME: FindLargeDocs.ps1
3   # AUTHOR: Chalo Reyes
4   # DATE: 2018-01-12
5   # This script uses a function to find large doc files
6   # ————————————————————————
7   Function Get-Doc($path)
8   {
9   Get-ChildItem -Path $path -include *.doc,*.docx -recurse
10  } # end Get-Doc
11  Filter LargeFiles($size)
12  {
13  $_ |
14  Where-Object { $_.length -ge $size }
15  } #end LargeFiles
16  Get-Doc(”E:\”) | LargeFiles 1000
För att få fram version av operativsystemet:
1     # ————————————————————————
2    # NAME: osVersion.ps1
3    # AUTHOR: Chalo Reyest
4    # DATE: 2018-01-12
5    # This script returns the OS version number
6    # ————————————————————————
7     Function Get-0sVersion
8    {
9    (Get-WmiObject -Class Win32_OperatingSystem).Version
10  } #end Get-OperatingSystemVersion
11   ”This OS is version $(Get-osVersion)”
För att få fram BIOS:
1     # ————————————————————————
2    # NAME: osBios.ps1
3    # AUTHOR: Chalo Reyest
4    # DATE: 2018-01-12
5    # This script returns the OS version number
6    # ————————————————————————
7     Get-WmiObject  -class  Win32_Bios