Dit is een lijst van zaken die mijn collega’s en ik nuttig hebben gevonden in ons werk. Het is niet bedoeld als encyclopedische lijst, maar eerder als een plaats om dingen op te slaan die een beginner nuttig zou vinden, vooral dingen die veel tijd kosten om uit te zoeken.
Deze pagina is gestart voordat O’Reilly Windows PowerShell Cookbook van Lee Holmes publiceerde. Ik raad het boek van O’Reilly aan, maar deze pagina staat er los van.
Zie ook PowerShell gotchas.
- Outline
- Aan de slag/installatie
- U installeert PowerShell
- Community Extensions-bibliotheek installeren
- Weg met de melding “uitvoering van scripts is uitgeschakeld”
- Stel uw “scripts:” PowerShell-schijflocatie
- Uw opdrachtprompt configureren
- Diverse taken
- Naar het scherm schrijven
- De gebruiker om invoer vragen
- Datums manipuleren
- Send email
- Sleep
- Lijst een directory (recursief)
- Test of een bestand bestaat
- Leest bestandsregels in een array
- Schrijft naar een bestand
- Hernoem een bestand
- Wis een bestand
- Werken met reguliere expressies
- Splits en voeg strings
- Grijp een webpagina
- Lezen en schrijven in het register
- Aanhalingstekens
- Time a command
- Tekst naar spraak
- Toegang tot het klembord van Windows
- Laad een .NET assembly
- Code uitvoeren die tijdens runtime is gemaakt
- Uitvoeren van een programma met een spatie in het pad
Outline
- Aan de slag/installatie
- Installeer PowerShell
- Installeer Community Extensions library
- Verwijder de melding “execution of scripts is disabled”
- Stel uw “scripts:” PowerShell-schijflocatie
- Uw opdrachtprompt configureren
- Diverse taken
- Schrijven naar het scherm
- Prompt gebruiker om invoer
- Data manipuleren
- E-mail verzenden
- Slapen
- Lijst van een directory (recursief)
- Test of een bestand bestaat
- Leest bestandsregels in een array
- Schrijven naar een bestand
- Een bestand hernoemen
- Een bestand verwijderen
- Werken met reguliere expressies
- Tekenreeksen splitsen en samenvoegen
- Een web pagina
- Lezen en schrijven in register
- Begrijpen van aanhalingstekens
- Tijd een commando
- Tekst naar spraak
- Toegang tot het Windows klembord
- Laden van een .NET assembly
- Uitvoeren van code die tijdens runtime is gemaakt
- Uitvoeren van een programma met een spatie in het pad
Aan de slag/installatie
U installeert PowerShell
U kunt PowerShell verkrijgen bij:
https://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx
top
Community Extensions-bibliotheek installeren
De PowerShell Community Extensions (PSCX)-bibliotheek is hier beschikbaar:
https://www.codeplex.com/Wiki/View.aspx?ProjectName=PowerShellCX
Dit is een handige verzameling cmdlets en functies. Het installeert een “PowerShell Here”-contextmenu in WindowsExplorer waarmee een PowerShell-opdrachtvenster wordt geopend in de map waarop u met de rechtermuisknop klikt. PSCX biedt ook een voorbeeld Profile.ps1
-bestand.
Nadat PSCX is geïnstalleerd, typt u man about_pscx
om een overzicht te zien van de cmdlets, providers, enzovoort die bij PSCX worden geleverd.
top
Weg met de melding “uitvoering van scripts is uitgeschakeld”
Het eerste probleem dat u waarschijnlijk zult tegenkomen bij het uitvoeren van PowerShell-scripts is zoiets als dit:
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 <<<<
Dit komt door de standaard beveiligingsinstelling in PowerShell die het uitvoeren van kwaadaardige scripts verbiedt.
U kunt dit gedrag veranderen door het volgende te doen:
PSH> set-executionPolicy RemoteSigned
Nu zullen alleen scripts afkomstig van externe bronnen digitaal ondertekend moeten worden.
top
Stel uw “scripts:” PowerShell-schijflocatie
Als u een aantal PowerShell-scripts hebt geschreven, vindt u het misschien handig om ze op één plaats te verzamelen en een PSDrive met de naam scripts:
te maken om ze snel te vinden. U kunt het volgende aan uw PSCX-profiel toevoegen om een dergelijke PSDrive te maken.
New-PSdrive -name scripts -PSprovider filesystem -root C:\bin\PowerShellScripts
top
Uw opdrachtprompt configureren
Om uw opdrachtprompt te configureren, maakt u eenvoudig een functie met de naam prompt
en plaatst u deze in uw profiel. Het volgende zorgt er bijvoorbeeld voor dat de werkdirectory wordt weergegeven.
function prompt { "$pwd> " }
Merk op dat u elke code die u maar wilt in de prompt
functie kunt zetten en dat die code wordt uitgevoerd elke keer dat u op return drukt.
top
Diverse taken
Naar het scherm schrijven
Gebruik Write-Host
om uitvoer te schrijven. U kunt optioneel -foregroundcolor
opgeven om de uitvoer te kleuren. Fouten en waarschuwingen kunnen bijvoorbeeld rood worden gemarkeerd.
Voorbeeld:
Write-Host "Hello world" -foregroundcolor red
top
De gebruiker om invoer vragen
Gebruik Read-Host
.
Voorbeeld:
$a = Read-Host "Enter your name"Write-Host "Hello" $a
top
Datums manipuleren
Het cmdlet get-date
retourneert een DateTime
object. Zonder argument, geeft het de huidige tijd en datum. Met een string argument, geen noodzaak om te citeren, het parses de string in een datum.
Voorbeeld: Zoek het aantal dagen en uren sinds de tweehonderdste verjaardag van de Verenigde Staten.
(get-date) - (get-date 7/4/1976)
U kunt ook tekenreeksen casten naar DateTime
-objecten met behulp van de cast .
top
Send email
Gebruik het Send-SmtpMail
cmdlet van PowerShell Community Extensions.
Example:
Send-SmtpMail -SmtpHost wotan.mdacc.tmc.edu -from [email protected] -to [email protected] -body "hello world"
top
Sleep
Gebruik het Start-Sleep
cmdlet. Duurt standaard seconden, maar heeft een -milliseconds
optie.
Voorbeeld:
Write-Host "hello"; Start-Sleep 5; Write-Host "world"
top
Lijst een directory (recursief)
U kunt het dir
commando gebruiken, wat eigenlijk een alias is voor Get-ChildItem
. Om een directory recursief op te sommen, voegt u de -recurse
optie toe.
Voorbeeld:
dir f:\bin -recurse
top
Test of een bestand bestaat
Gebruik test-path
.
top
Leest bestandsregels in een array
Gebruik get-content
.
Voorbeeld:
$a = (get-content foo.txt)
top
Schrijft naar een bestand
Gebruik Out-File
. Tenzij u uitvoer in Unicode wilt, specificeert u -encoding ASCII
Voorbeeld:
$foo | out-file -encoding ASCII foo.txt
top
Hernoem een bestand
Gebruik Rename-Item
of zijn alias ren
.
top
Wis een bestand
Gebruik Delete-Item
of zijn alias del
.
top
Werken met reguliere expressies
Zie Reguliere expressies in PowerShell en Perl.
top
Splits en voeg strings
Strings hebben een split
methode. Het argument voor split()
is een string met tekens om op te splitsen. De functie ::split
is algemener. Het eerste argument is de string die moet worden gesplitst, en het tweede argument is een reguliere expressie waarop moet worden gesplitst.
Voorbeeld:
$a.split("`t ")
zal de string $a
in een array van strings splitsen, waarbij wordt gesplitst overal waar een tab of een spatie staat.
Voorbeeld:
$a = "123,456,apple"; ::split($a, ",(?!\d)")
zal $a
splitsen op komma’s die niet door cijfers worden gevolgd. Dus de splitsing zou “123,456” en “apple” opleveren.
Als de tekenreeks die u wilt splitsen een Windows-pad is, kunt u het gespecialiseerde commando Split-Path gebruiken.
Om een array in een enkele tekenreeks samen te voegen, gebruikt u de methode ::join
. Het eerste argument is het scheidingsteken en het tweede is de array.
Voorbeeld:
$a = 1, 2, 3;#note: this is an array, not a string$b = ::join("*", $a)
Nu $b
bevat “1*2*3”.
top
Grijp een webpagina
Gebruik ofwel Get-Url
van PSCX of het net.webclient
object van .NET. De eerste is beknopter, maar de laatste biedt meer mogelijkheden.
Voorbeeld:
$w = Get-Url "https://www.w3.org"
$w = (new-object net.webclient).DownloadString("https://www.w3.org")
De code (new-object net.webclient)
creëert een .NET WebClient
object met veel nuttige methoden. U zou bijvoorbeeld DownladFile
kunnen oproepen om direct op schijf op te slaan in plaats van in een string. Er zijn ook UploadData
en UploadFile
methoden.
top
Lezen en schrijven in het register
U kunt door het register navigeren zoals u door het bestandssysteem zou navigeren, hoewel er enkele details zijn die u moet weten.
Elke hive van het register is als een schijf. Dus, bijvoorbeeld, om HKEY_CURRENT_USER
te verkennen, kunt u cd HKCU:
en dan cd
gebruiken om uw weg naar beneden te werken. Gebruik Get-ItemProperty
om te lezen en Set-ItemProperty
om te schrijven. U kunt ook Remove-ItemProperty
gebruiken om te verwijderen.
Voorbeeld:
De onderstaande commando’s geven een lijst van de inhoud van de register node die de cmd.exe
shell configureert. Door CompletionChar
op 9 te zetten, zetten we tab completion aan.
cd HKCU:\Software\Microsoft\Command ProcessorGet-ItemProperty .Set-ItemProperty . -name CompletionChar -Value 9
Dit TechNet artikel gaat in meer details.
top
Aanhalingstekens
PowerShell heeft vier soorten aanhalingstekens: enkele en dubbele gewone aanhalingstekens, en enkele en dubbele hier-strings. Binnen dubbele aanhalingstekens en dubbele here-strings worden namen van variabelen vervangen door hun waarden en worden PowerShell escape-sequenties geïnterpreteerd. Binnen enkele aanhalingstekens en enkele hier-teksten worden variabelennamen niet uitgebreid en worden escape-sequenties niet geïnterpreteerd. Bijvoorbeeld, de code snippet
$a = "bar" 'foo`t$a', "foo`t$a"
zal de output
foo`t$a foo bar
produceren omdat binnen de dubbele aanhalingstekens, `t
uitzet naar een tab en $a
uitzet naar “bar”.
PowerShell here-strings zijn als here-documenten in Perl. Binnen een here-string, dubbele en enkele aanhalingstekens zijn niet speciaal, maar letterlijk geciteerd. Ook regelafbrekingen worden behouden.
Een here-string begint met @"
of @'
en eindigt met dezelfde symbolen in de omgekeerde volgorde. Er moet een nieuwe regel staan na de open-marker en voor de sluit-marker.
Voorbeeld
$a = "bar" $b = @" foo "baz" 'qux' $a "@ $b
produceert
foo "baz" 'qux' bar
en
$a = "bar" $b = @' foo "baz" 'qux' $a '@ $b
produceert
foo "baz" 'qux' $a
Merk op dat er geen witruimte mag staan na het aanhalingsteken waarmee een hier-string wordt geopend. Anders krijgt u de melding “Unrecognized token in source text.”
Hoewel ze op elkaar lijken, zijn PowerShell here-strings en C# verbatim strings tamelijk verschillend. De volgende tabel geeft een overzicht van de verschillen.
C# verbatim strings | PowerShell here-strings |
---|---|
Mag regeleindes bevatten | Moet regeleindes bevatten |
Alleen dubbele aanhalingstekens | Enkele en dubbele aanhalingstekens |
Begint met @” | Begint met @” (of @’) plus een regeleinde |
Eindigt met “ | Eindigt met een regeleinde gevolgd door “@ (of ‘@) |
Kan geen on-dubbele aanhalingstekens bevatten | Mag aanhalingstekens bevatten |
Uitschakelen van C# escape-sequences | ‘@ schakelt PowerShell escape-sequences uit, maar ‘@ niet |
top
Time a command
Gebruik Measure-Command
om te timen hoe lang het duurt voordat een taak is voltooid.
top
Tekst naar spraak
Gebruik Out-Speech
van PSCX.
top
Toegang tot het klembord van Windows
Gebruik de PSCX cmdlets Get-Clipboard
en Out-Clipboard
om te lezen van en te schrijven naar het klembord.
top
Laad een .NET assembly
U kunt LoadWithPartialName
aanroepen. Om bijvoorbeeld de assembly voor de Team Foundation Server API te laden, zou u
::LoadWithPartialName("Microsoft.TeamFoundation.Client")
Zie ook Resolve-Assembly
van PSCX.
top
Code uitvoeren die tijdens runtime is gemaakt
Het commando Invoke-Expression
is analoog aan eval
in Perl of JavaScript. Invoke-Expression $str
voert de code uit die in de string $str
staat.
top
Uitvoeren van een programma met een spatie in het pad
Plaats aanhalingstekens rond het pad en zet er een ampersand voor. Bijvoorbeeld,
& "C:\Program Files\WinEdt Team\WinEdt\WinEdt.exe"
start het uitvoerbare programma WinEdt.exe
dat twee spaties in het volledige pad heeft.
Merk op dat u de ampersand niet kunt weglaten. In tegenstelling tot cmd.exe
, gaat PowerShell er niet van uit dat alle strings commando’s zijn. Zonder de ampersand is een geciteerd pad gewoon een tekenreeks.
top