Detta är en lista över saker som jag och mina kollegor har funnit användbara i vårt arbete. Den är inte avsedd att vara encyklopedisk, utan snarare en plats för att registrera saker som en nybörjare skulle finna användbara, särskilt saker som kan ta lång tid att räkna ut.
Denna sida startades innan O’Reilly publicerade Windows PowerShell Cookbook av Lee Holmes. Jag rekommenderar O’Reillys bok, men den här sidan har inget samband med den.
Se även PowerShell gotchas.
- Outline
- Komma igång/installation
- Installera PowerShell
- Installera biblioteket Community Extensions
- Bli av med meddelandet ”Exekvering av skript är inaktiverat”
- Ställ in dina ”skript:”. PowerShell-enhetsplats
- Konfigurera din kommandoprompt
- Diverse uppgifter
- Skriva till skärmen
- Fråga användaren om inmatning
- Manipulera datum
- Skicka e-post
- Sleep
- Lista en katalog (rekursivt)
- Testar om en fil finns
- Läs fillinjer i en array
- Skriv till en fil
- Byt namn på en fil
- Ta bort en fil
- Arbeta med reguljära uttryck
- Dela upp och sammanfoga strängar
- Ta en webbsida
- Läsa och skriva till registret
- Förstå citationstecken
- Tidsbestäm ett kommando
- Text till tal
- Åtkomst till Windows klippbräda
- Ladda en .NET-grupp
- Exekvera kod som skapats vid körning
- Exekvera ett program med ett mellanslag i sökvägen
Outline
- Kom igång/installation
- Installera PowerShell
- Installera Community Extensions-biblioteket
- Bortse från meddelandet ”Exekvering av skript är inaktiverat”
- Inställ dina ”skript:”. PowerShell-enhetens plats
- Konfigurera kommandoprompten
- Övriga uppgifter
- Skriva till skärmen
- Bedraga användaren om inmatning
- Manipulera datum
- Sänd e-post
- Sova
- Lista en katalog (rekursivt)
- Testar om en fil existerar
- Läs filrader till en array
- Skriv till en fil
- Namnge en fil
- Ta bort en fil
- Arbeta med reguljära uttryck
- Splita och sammanfoga strängar
- Hämta en webb sida
- Läs och skriv i registret
- Förstå citationstecken
- Tidsbestäm ett kommando
- Text till tal
- Access till Windows klippbräda
- Ladda en .NET assembly
- Exekvera kod som skapats vid körning
- Exekvera ett program med ett mellanslag i sökvägen
Komma igång/installation
Installera PowerShell
Du kan få PowerShell från:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
top
Installera biblioteket Community Extensions
Biblioteket PowerShell Community Extensions (PSCX) finns här:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX
Detta är en användbar samling cmdlets och funktioner. Det installerar en ”PowerShell Here”-kontextmeny i WindowsExplorer som öppnar ett PowerShell-kommandofönster i den mapp som du högerklickar på. Dessutom tillhandahåller PSCX en exempelfil Profile.ps1
.
När PSCX är installerad skriver du man about_pscx
för att se en översikt över de cmdlets, providers etc. som ingår i PSCX.
top
Bli av med meddelandet ”Exekvering av skript är inaktiverat”
Det första problemet som du sannolikt stöter på när du kör PowerShell-skript är något som liknar det här:
PSH> .\myScript.ps1File D:\myScript.ps1 cannot be loaded. The fileD:\myScript.ps1 is not digitally signed. The script will not execute on thesystem. Please see "get-help about_signing" for more details..
At line:1 char:13 + .\myScript.ps1 <<<<
Det här beror på den standardiserade säkerhetsinställningen i PowerShell som förbjuder skadliga skript att köras.
Du kan ändra detta beteende genom att göra så här:
PSH> set-executionPolicy RemoteSigned
Nu kommer endast skript som kommer från fjärrkällor att kräva digital signering.
top
Ställ in dina ”skript:”. PowerShell-enhetsplats
När du har skrivit ett antal PowerShell-skript kan det vara användbart att samla dem på ett ställe och skapa en PSDrive med namnet scripts:
för att snabbt hitta dem. Du kan lägga till följande i din PSCX-profil för att skapa en sådan PSDrive.
New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts
top
Konfigurera din kommandoprompt
För att konfigurera din kommandoprompt skapar du helt enkelt en funktion som heter prompt
och lägger den i din profil. Följande kommer till exempel att leda till att arbetskatalogen visas.
function prompt { "$pwd> " }
Notera att du kan lägga in vilken kod som helst i prompt
-funktionen och den koden kommer att köras varje gång du trycker på return.
top
Diverse uppgifter
Skriva till skärmen
Använd Write-Host
för att skriva utdata. Du kan valfritt ange -foregroundcolor
för att färga utmatningen. Exempelvis kan fel och varningar markeras med rött.
Exempel:
Write-Host "Hello world" -foregroundcolor red
top
Fråga användaren om inmatning
Använd Read-Host
.
Exempel:
$a = Read-Host "Enter your name"Write-Host "Hello" $a
top
Manipulera datum
Cmdlet get-date
returnerar ett DateTime
-objekt. Utan argument returneras aktuell tid och datum. Med ett strängargument, inget behov av citationstecken, analyseras strängen till ett datum.
Exempel: Du kan också kasta strängar till DateTime
-objekt genom att använda cast .
top
Skicka e-post
Använd cmdlet Send-SmtpMail
från PowerShell Community Extensions.
Exempel:
Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"
top
Sleep
Använd cmdlet Start-Sleep
. Tar sekunder som standard, men har ett -milliseconds
-alternativ.
Exempel:
Write-Host "hello"; Start-Sleep 5; Write-Host "world"
top
Lista en katalog (rekursivt)
Du kan använda kommandot dir
, som egentligen är ett alias till Get-ChildItem
. För att lista en katalog rekursivt lägger du bara till alternativet -recurse
.
Exempel:
dir f:\bin -recurse
top
Testar om en fil finns
Använd test-path
.
top
Läs fillinjer i en array
Använd get-content
.
Exempel:
$a = (get-content foo.txt)
top
Skriv till en fil
Använd Out-File
. Om du inte vill ha Unicode-utdata anger du -encoding ASCII
Exempel:
$foo | out-file -encoding ASCII foo.txt
top
Byt namn på en fil
Använd Rename-Item
eller dess alias ren
.
top
Ta bort en fil
Använd Delete-Item
eller dess alias del
.
top
Arbeta med reguljära uttryck
Se Reguljära uttryck i PowerShell och Perl.
top
Dela upp och sammanfoga strängar
Strängar har en split
metod. Argumentet till split()
är en sträng som innehåller tecken som ska delas upp på. Funktionen ::split
är mer generell. Dess första argument är strängen som ska delas och dess andra argument är ett reguljärt uttryck på vilket den ska delas.
Exempel:
$a.split("`t ")
kommer att dela strängen $a
i en array av strängar, och dela där det finns en tabb eller ett mellanslag.
Exempel:
$a = "123,456,apple"; ::split($a, ",(?!\d)")
kommer att dela $a
på kommatecken som inte följs av siffror. Så uppdelningen skulle ge ”123,456” och ”apple”.
Om strängen du delar upp är en Windows-sökväg kan du använda det specialiserade kommandot Split-Path.
Om du vill sammanfoga en array till en enda sträng använder du ::join
-metoden. Det första argumentet är separationstecknet och det andra är arrayen.
Exempel:
$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)
Nu innehåller $b
”1*2*3”.
top
Ta en webbsida
Använd antingen Get-Url
från PSCX eller net.webclient
objektet från .NET. Det förstnämnda är mer kortfattat men det senare ger fler alternativ.
Exempel:
$w = Get-Url "https://www.w3.org"
$w = (new-object net.webclient).DownloadString("https://www.w3.org")
Koden (new-object net.webclient)
skapar ett .NET WebClient
objekt med många användbara metoder. Du kan till exempel anropa DownladFile
för att spara direkt till disken i stället för till en sträng. Det finns också UploadData
och UploadFile
metoder.
top
Läsa och skriva till registret
Du kan navigera i registret på samma sätt som i filsystemet, även om det finns en del detaljer att känna till.
Varje hive i registret är som en enhet. Så för att utforska HKEY_CURRENT_USER
kan du till exempel cd HKCU:
och sedan använda cd
för att arbeta dig nedåt i trädet. Använd Get-ItemProperty
för att läsa och Set-ItemProperty
för att skriva. Du kan också använda Remove-ItemProperty
för att ta bort.
Exempel:
Kommandona nedan listar innehållet i den registernod som konfigurerar skalet cmd.exe
. Genom att ställa in CompletionChar
till 9 aktiverar vi tabkomplettering.
cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9
Denna TechNet-artikel går in på mer detaljer.
top
Förstå citationstecken
PowerShell har fyra typer av citationstecken: enkla och dubbla vanliga citationstecken samt enkla och dubbla här-strängar. Inom dubbla citationstecken och dubbla here-strings ersätts variabelnamn med deras värden och PowerShells escape-sekvenser tolkas. Inom enkla citattecken och enkla here-strings expanderas inte variabelnamn och escape-sekvenser tolkas inte. Kodutdraget
$a = "bar" 'foo`t$a', "foo`t$a"
ger till exempel utdata
foo`t$a foo bar
eftersom `t
inom dubbla citationstecken expanderas till en tabb och $a
expanderas till ”bar”.
PowerShell here-strings är som here-dokument i Perl. Inom en here-string är dubbla och enkla citattecken inte speciella utan citeras bokstavligen. Dessutom bevaras radbrytningar.
En here-string börjar med antingen @"
eller @'
och slutar med samma symboler i motsatt ordning. Det måste finnas en ny rad efter den inledande markeringen och före den avslutande markeringen.
Exempel
$a = "bar" $b = @" foo "baz" 'qux' $a "@ $b
producerar
foo "baz" 'qux' bar
och
$a = "bar" $b = @' foo "baz" 'qux' $a '@ $b
producerar
foo "baz" 'qux' $a
Bemärk att det inte får finnas något vitrymder efter citationstecken som inleder en here-string. Annars får du meddelandet ”Unrecognized token in source text.”
Trots att de ser likadana ut är PowerShell here-strings och C# verbatimstrings ganska olika. Följande tabell sammanfattar skillnaderna.
C# verbatim strings | PowerShell here-strings |
---|---|
Kan innehålla radbrytningar | Måste innehålla radbrytningar |
Enbart varianter med dubbla citationstecken | Enkla och dubbla citationstecken |
Börjar med @” | Börjar med @” (eller @’) plus ett radbrytning |
Finns med ” | Finns med ett radbrytning följt av ”@ (eller ’@’-) |
Kan inte innehålla o-escaped double quotes | Måste innehålla citationstecken |
Släcker C#-utryckningssekvenser | ’@ släcker PowerShell-utryckningssekvenser, men ”@” gör det inte |
top
Tidsbestäm ett kommando
Använd Measure-Command
för att tidsbestämma hur lång tid det tar att slutföra en uppgift.
top
Text till tal
Använd Out-Speech
från PSCX.
top
Åtkomst till Windows klippbräda
Använd PSCX-cmdlets Get-Clipboard
och Out-Clipboard
för att läsa från och skriva till klippbordet.
top
Ladda en .NET-grupp
Du kan anropa LoadWithPartialName
. Om du till exempel vill läsa in samlingen för Team Foundation Server API skulle du exekvera
::LoadWithPartialName("Microsoft.TeamFoundation.Client")
Se även Resolve-Assembly
från PSCX.
top
Exekvera kod som skapats vid körning
Kommandot Invoke-Expression
är analogt med eval
i Perl eller JavaScript. Invoke-Expression $str
exekverar koden som finns i strängen $str
.
top
Exekvera ett program med ett mellanslag i sökvägen
Sätt citationstecken runt sökvägen och sätt ett ampersand framför. Till exempel,
& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"
startar det körbara programmet WinEdt.exe
som har två mellanslag i sin fullständiga sökväg.
Notera att du inte kan utelämna ampersand. Till skillnad från cmd.exe
antar PowerShell inte att alla strängar är kommandon. Utan ampersand är en angiven sökväg bara en sträng.
top