PowerShell script

Ett PowerShell script är en textfil som innehåller en eller flera Windows PowerShell kommandon. När du kör scriptet exekveras kommandon precis som om du skrev de 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 ett script 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 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, testa 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.

PowerShell kommando kan kombineras med operatörer, loopar, 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.

När man vill exekvera något script från PS konsolen skriver man scriptets 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 script.

Exekveringspolicy

Exekvering av script 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 lokala 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
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\Scripts\PS\Lab1 via skript:
1 $newFolder = New-Object -ComObject scripting.filesystemobject
2 $newFolder.CreateFolder(”C:\VMshares\Scripts\PS\Lab1”)
Kör skriptet genom att klicka på RUN i PS ISE. Därefter lagra ditt första skript i mappen C:\VMshares\Scripts\PS\Lab1\newFolder.ps1
För att skapa flera kataloger i C:\VMshares\Scripts\PS\ via skript:
1    # newFolders.ps1
2   # Creates subfolders lab2 to lab15 into C:\VMshares\Scripts\PS\
3   # Chalo Reyes, 2018-01-12
4   #
5   for ($i = 2; $i -le 15; $i++)
6   {
7   New-Item -path C:\VMshares\Scripts\PS\  -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
För att inprogrammera IP-adress
1 #set static IP address
2 $ipaddress = “172.16.8.11”
3 $ipprefix = “21”
4 #$ipgw = “172.16.8.1”
5 $ipdns = “172.16.8.10”
6 $ipif = (Get-NetAdapter).ifIndex
7 New-NetIPAddress  -IPAddress  $ipaddress  -PrefixLength  $ipprefix  -InterfaceIndex  $ipif  -DefaultGateway  $ipgw