Dette er en liste over ting, som mine kolleger og jeg har fundet nyttige i vores arbejde. Det er ikke meningen, at den skal være encyklopædisk, men snarere et sted at registrere ting, som en nybegynder ville finde nyttige, især ting, der kan tage lang tid at finde ud af.
Denne side blev startet, før O’Reilly udgav Windows PowerShell Cookbook af Lee Holmes. Jeg anbefaler O’Reillys bog, men denne side er ikke relateret til den.
Se også PowerShell gotchas.
- Outline
- Kom godt i gang/installation
- Installer PowerShell
- Installer biblioteket Community Extensions
- Slip af med meddelelsen “udførelse af scripts er deaktiveret”
- Opsæt dine “scripts:” PowerShell-drevplacering
- Konfigurer din kommandoprompt
- Diverse opgaver
- Skrive til skærmen
- Opfordrer brugeren til at indtaste input
- Manipulér datoer
- Send e-mail
- Sleep
- Liste en mappe (rekursivt)
- Test, om en fil findes
- Læs fillinjer i et array
- Skriv til en fil
- Omdøb en fil
- Slet en fil
- Arbejde med regulære udtryk
- Opdele og sammenføje strenge
- Grib en webside
- Læs og skriv til registreringsdatabasen
- Forstå anførselstegn
- Tidsindstille en kommando
- Tekst til tale
- Få adgang til Windows’ udklipsholder
- Indlæs en .NET-samling
- Udfør kode oprettet på køretid
- Udfør et program med et mellemrum i stien
Outline
- Kom godt i gang/installation
- Installer PowerShell
- Installer Community Extensions-biblioteket
- Få bugt med meddelelsen “execution of scripts is disabled”
- Sæt dine “scripts” op:
- PowerShell-drevplacering
- Konfigurer din kommandoprompt
- Diverse opgaver
- Skrive til skærmen
- Spørge brugeren om input
- Manipulere datoer
- Sende e-mail
- Stille sig i dvale
- Liste over en mappe (rekursivt)
- Teste, om en fil findes
- Læse fillinjer i en array
- Skriv til en fil
- Skriv en fil om i en fil
- Slet en fil
- Arbejd med regulære udtryk
- Split and join strings
- Grab en web side
- Læs og skriv i registreringsdatabasen
- Forstå anførselstegn
- Tid en kommando
- Tekst til tale
- Access til Windows’ udklipsholder
- Indlæs en .NET-samling
- Udfør kode, der er oprettet ved kørselstid
- Udfør et program med et mellemrum i dets sti
Kom godt i gang/installation
Installer PowerShell
Du kan få PowerShell fra:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
top
Installer biblioteket Community Extensions
Biblioteket PowerShell Community Extensions (PSCX) er tilgængeligt her:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX
Det er en nyttig samling af cmdlets og funktioner. Det installerer en “PowerShell her”-kontekstmenu i WindowsExplorer, der åbner et PowerShell-kommandovindue i den mappe, som du højreklikker på. PSCX indeholder også en prøvefil Profile.ps1
.
Når PSCX er installeret, skal du skrive man about_pscx
for at få vist en oversigt over de cmdlets, providers osv. der følger med PSCX.
top
Slip af med meddelelsen “udførelse af scripts er deaktiveret”
Det første problem, du sandsynligvis vil støde på, når du kører PowerShell-scripts, er noget i stil med dette:
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 <<<<
Dette skyldes den standardsikkerhedsindstilling i PowerShell, der forbyder, at ondsindede scripts kan køres.
Du kan ændre denne adfærd ved at gøre dette:
PSH> set-executionPolicy RemoteSigned
Nu vil kun scripts, der kommer fra eksterne kilder, kræve digital signering.
top
Opsæt dine “scripts:” PowerShell-drevplacering
Når du har skrevet en række PowerShell-scripts, kan du måske finde det nyttigt at samle dem ét sted og oprette et PSDrive med navnet scripts:
for hurtigt at kunne finde dem. Du kan føje følgende til din PSCX-profil for at oprette et sådant PSDrive.
New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts
top
Konfigurer din kommandoprompt
For at konfigurere din kommandoprompt skal du blot oprette en funktion ved navn prompt
og føje den til din profil. Følgende vil f.eks. få arbejdskataloget til at blive vist.
function prompt { "$pwd> " }
Bemærk, at du kan lægge en hvilken som helst kode ind i prompt
-funktionen, og at koden vil blive kørt, hver gang du trykker på return.
top
Diverse opgaver
Skrive til skærmen
Brug Write-Host
til at skrive output. Du kan eventuelt angive -foregroundcolor
for at farve output. F.eks. kan fejl og advarsler fremhæves med rødt.
Eksempel:
Write-Host "Hello world" -foregroundcolor red
top
Opfordrer brugeren til at indtaste input
Brug Read-Host
.
Eksempel:
$a = Read-Host "Enter your name"Write-Host "Hello" $a
top
Manipulér datoer
Cmdlet get-date
returnerer et DateTime
-objekt. Uden argument returnerer den det aktuelle klokkeslæt og den aktuelle dato. Med et strengargument, uden at det er nødvendigt at sætte citationstegn, analyserer den strengen til en dato.
Eksempel: Find antallet af dage og timer siden USA’s tohundredeårsdag.
(get-date) - (get-date 7/4/1976)
Du kan også omdanne strenge til DateTime
-objekter ved at bruge cast .
top
Send e-mail
Brug cmdletten Send-SmtpMail
fra PowerShell Community Extensions.
Eksempel:
Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"
top
Sleep
Brug cmdletten Start-Sleep
. Tager som standard sekunder, men har en -milliseconds
indstilling.
Eksempel:
Write-Host "hello"; Start-Sleep 5; Write-Host "world"
top
Liste en mappe (rekursivt)
Du kan bruge kommandoen dir
, som i virkeligheden er et alias til Get-ChildItem
. Hvis du vil liste en mappe rekursivt, skal du blot tilføje indstillingen -recurse
.
Eksempel:
dir f:\bin -recurse
top
Test, om en fil findes
Brug test-path
.
top
Læs fillinjer i et array
Brug get-content
.
Eksempel:
$a = (get-content foo.txt)
top
Skriv til en fil
Brug Out-File
. Medmindre du ønsker Unicode-udskrift, skal du angive -encoding ASCII
Eksempel:
$foo | out-file -encoding ASCII foo.txt
top
Omdøb en fil
Brug Rename-Item
eller dens alias ren
.
top
Slet en fil
Brug Delete-Item
eller dens alias del
.
top
Arbejde med regulære udtryk
Se Regulære udtryk i PowerShell og Perl.
top
Opdele og sammenføje strenge
Trenge har en split
-metode. Argumentet til split()
er en streng, der indeholder tegn, der skal opdeles på. Funktionen ::split
er mere generel. Dens første argument er den streng, der skal opdeles, og dens andet argument er et regulært udtryk, som den skal opdele på.
Eksempel:
$a.split("`t ")
vil opdele strengen $a
i et array af strenge og opdele, hvor der er en tabulator eller et mellemrum.
Eksempel:
$a = "123,456,apple"; ::split($a, ",(?!\d)")
vil opdele $a
på kommaer, der ikke er efterfulgt af cifre. Så opdelingen ville give “123,456” og “apple”.
Hvis den streng, du deler, er en Windows-sti, skal du måske bruge den specialiserede Split-Path-kommando.
For at samle et array til en enkelt streng skal du bruge ::join
-metoden. Det første argument er adskillelsestegnet, og det andet er arrayet.
Eksempel:
$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)
Nu indeholder $b
“1*2*3”.
top
Grib en webside
Brug enten Get-Url
fra PSCX eller net.webclient
-objektet fra .NET. Førstnævnte er mere kortfattet, men sidstnævnte giver flere muligheder.
Eksempel:
$w = Get-Url "https://www.w3.org"
$w = (new-object net.webclient).DownloadString("https://www.w3.org")
Koden (new-object net.webclient)
opretter et .NET WebClient
-objekt WebClient
med mange nyttige metoder. Du kan f.eks. kalde DownladFile
for at gemme direkte på disken i stedet for til en streng. Der er også UploadData
og UploadFile
metoder.
top
Læs og skriv til registreringsdatabasen
Du kan navigere i registreringsdatabasen som i filsystemet, selv om der er nogle detaljer, du skal kende.
Hvert hive i registreringsdatabasen er som et drev. Så hvis du f.eks. vil udforske HKEY_CURRENT_USER
, kan du cd HKCU:
og derefter bruge cd
til at arbejde dig ned gennem træet. Brug Get-ItemProperty
til at læse og Set-ItemProperty
til at skrive. Du kan også bruge Remove-ItemProperty
til at slette.
Eksempel:
Med nedenstående kommandoer får du en liste over indholdet af den registreringsnode, der konfigurerer cmd.exe
-skal. Ved at indstille CompletionChar
til 9 slår vi tabulatorudfyldning til.
cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9
Denne TechNet-artikel går mere i detaljer.
top
Forstå anførselstegn
PowerShell har fire slags anførselstegn: enkle og dobbelte almindelige anførselstegn samt enkle og dobbelte her-strenge. Inden for dobbelte anførselstegn og dobbelte her-strenge erstattes variabelnavne med deres værdier, og PowerShell-emnefølger fortolkes. Inden for enkle anførselstegn og enkle here-strings udvides variabelnavne ikke, og escape-sekvenser fortolkes ikke. F.eks. vil kodestumpen
$a = "bar" 'foo`t$a', "foo`t$a"
give output
foo`t$a foo bar
, fordi `t
inden for de dobbelte citationstegn udvides til en tabulator og $a
udvides til “bar”.
PowerShell here-strings er som here-dokumenter i Perl. Inde i en here-streng er dobbelte og enkelte anførselstegn ikke specielle, men anføres bogstaveligt. Desuden bevares linjeskift.
En here-string begynder med enten @"
eller @'
og slutter med de samme symboler i den modsatte rækkefølge. Der skal være en newline efter den indledende markering og før den afsluttende markering.
Eksempel
$a = "bar" $b = @" foo "baz" 'qux' $a "@ $b
producerer
foo "baz" 'qux' bar
og
$a = "bar" $b = @' foo "baz" 'qux' $a '@ $b
producerer
foo "baz" 'qux' $a
Bemærk, at der ikke må være noget hvidt mellemrum efter det citationstegn, der åbner en her-streng. Ellers får du meddelelsen “Unrecognized token in source text.”
Og selv om de ligner hinanden, er PowerShell here-strings og C# verbatimstrings ret forskellige. Følgende tabel opsummerer forskellene.
C# verbatim-strings | PowerShell her-strings |
---|---|
Kan indeholde linjeskift | Skal indeholde linjeskift |
Kun dobbelt anførselstegnsvariant | Enkel- og dobbelt anførselstegnsvariant |
Begynder med @” | Begynder med @” (eller @’) plus et linjeskift |
Ender med “ | Ender med et linjeskift efterfulgt af “@ (eller ‘@) |
Kan ikke indeholde u-escaped double quotes | Må indeholde anførselstegn |
Slukker for C#- undvigelsessekvenser | ‘@ slukker for PowerShell- undvigelsessekvenser, men “@ gør ikke |
top
Tidsindstille en kommando
Brug Measure-Command
til at tidsindstille, hvor lang tid en opgave tager at fuldføre.
top
Tekst til tale
Brug Out-Speech
fra PSCX.
top
Få adgang til Windows’ udklipsholder
Brug PSCX-cmdlets Get-Clipboard
og Out-Clipboard
til at læse fra og skrive til udklipsholderen.
top
Indlæs en .NET-samling
Du kan kalde LoadWithPartialName
. Hvis du f.eks. vil indlæse samlingen til Team Foundation Server API’et, skal du udføre
::LoadWithPartialName("Microsoft.TeamFoundation.Client")
Se også Resolve-Assembly
fra PSCX.
top
Udfør kode oprettet på køretid
Kommandoen Invoke-Expression
svarer til eval
i Perl eller JavaScript. Invoke-Expression $str
udfører den kode, der er indeholdt i strengen $str
.
top
Udfør et program med et mellemrum i stien
Sæt anførselstegn omkring stien, og sæt et ampersand foran. F.eks.
& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"
vil starte det eksekverbare program WinEdt.exe
, som har to mellemrum i sin fulde sti.
Bemærk, at du ikke kan udelade ampersandet. I modsætning til cmd.exe
antager PowerShell ikke, at alle strenge er kommandoer. Uden ampersandet er en sti i anførselstegn bare en streng.
top