PowerShell Handledning
Komma igång med PowerShell
Sök…
Anmärkningar
Windows PowerShell är en skal- och skriptkomponent i Windows Management Framework, ett ramverk för automatisering / konfigurering från Microsoft som bygger på .NET Framework. PowerShell installeras som standard på alla versioner av Windows-klient- och serveroperativsystem som stöds sedan Windows 7 / Windows Server 2008 R2. Powershell kan uppdateras när som helst genom att ladda ner en senare version av Windows Management Framework (WMF). "Alpha" -versionen av PowerShell 6 är korsplattform (Windows, Linux och OS X) och måste laddas ner och installeras från den här utgåvan .
Ytterligare resurser:
- MSDN-dokumentation: https://msdn.microsoft.com/en-us/powershell/scripting/powershell-scripting
- TechNet: https://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx
- PowerShell Gallery: https://www.powershellgallery.com/
- MSDN-blogg: https://blogs.msdn.microsoft.com/powershell/
- Github: https://github.com/powershell
- Community-webbplats: http://powershell.com/cs/
versioner
Version | Ingår i Windows | anteckningar | Utgivningsdatum |
---|---|---|---|
1,0 | XP / Server 2008 | 2006-11-01 | |
2,0 | 7 / Server 2008 R2 | 2009-11-01 | |
3,0 | 8 / Server 2012 | 2012-08-01 | |
4,0 | 8.1 / Server 2012 R2 | 2013/11/01 | |
5,0 | 10 / Server 2016 Tech Preview | 2015/12/16 | |
5,1 | 10 Jubileumsutgåva / Server 2016 | 2017/01/27 |
Installation eller installation
Windows
PowerShell ingår i Windows Management Framework. Installation och installation krävs inte i moderna versioner av Windows.
Uppdateringar av PowerShell kan genomföras genom att installera en nyare version av Windows Management Framework.
Andra plattformar
"Beta" -versionen av PowerShell 6 kan installeras på andra plattformar. Installationspaketen finns här .
Till exempel publiceras PowerShell 6 för Ubuntu 16.04 till paketförvar för enkel installation (och uppdateringar).
För att installera kör följande:
# Import the public repository GPG keys curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - # Register the Microsoft Ubuntu repository curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/microsoft.list # Update apt-get sudo apt-get update # Install PowerShell sudo apt-get install -y powershell # Start PowerShell powershell
När du registrerat Microsoft-förvaret en gång som superanvändare, från och med sedan, behöver du bara använda sudo apt-get upgrade powershell
att uppdatera det. Sedan kör bara powershell
Låt skript lagrade på din maskin köra osignerat
Av säkerhetsskäl är PowerShell inställt som standard så att endast signerade skript kan köras. Genom att utföra följande kommando kan du köra osignerade skript (du måste köra PowerShell som administratör för att göra detta).
Set-ExecutionPolicy RemoteSigned
Ett annat sätt att köra PowerShell-skript är att använda Bypass
som ExecutionPolicy
:
powershell.exe -ExecutionPolicy Bypass -File "c:\MyScript.ps1"
Eller från din befintliga PowerShell-konsol eller ISE-session genom att köra:
Set-ExecutionPolicy Bypass Process
En tillfällig lösning för exekveringspolicy kan också uppnås genom att köra Powershell-körbara och skicka alla giltiga -ExecutionPolicy
som -ExecutionPolicy
parameter. Policyen gäller bara under processens livstid, så ingen administrativ åtkomst till registret behövs.
C:\>powershell -ExecutionPolicy RemoteSigned
Det finns flera andra policyer tillgängliga, och webbplatser online uppmuntrar ofta dig att använda Set-ExecutionPolicy Unrestricted
. Denna policy förblir på plats tills den ändras och sänker systemets säkerhetsställning. Detta rekommenderas inte. Användning av RemoteSigned
rekommenderas eftersom det tillåter lokalt lagrad och skriven kod, och kräver fjärrförvärvad kod signeras med ett certifikat från en pålitlig rot.
Se också till att genomförandepolicyn kan verkställas av grupppolicy, så att även om policyn ändras till Unrestricted
systemomfattande, kan grupppolicy återställa inställningen vid nästa tillämpningsintervall (vanligtvis 15 minuter). Du kan se exekveringspolicyn inställd på olika områden med Get-ExecutionPolicy -List
TechNet-dokumentation:
Set-ExecutionPolicy
about_Execution_Policies
Aliaser och liknande funktioner
I PowerShell finns det många sätt att uppnå samma resultat. Detta kan illustreras fint med det enkla och bekanta Hello World
exemplet:
Använda Write-Host
:
Write-Host "Hello World"
Använda Write-Output
:
Write-Output 'Hello world'
Det är värt att notera att även om Write-Output
& Write-Host
båda skriver på skärmen finns det en subtil skillnad. Write-Host
skriver endast till stdout (dvs. konsolskärmen), medan Write-Output
skriver till både stdout OCH till output [success] -strömmen som möjliggör omdirigering . Omdirigering (och strömmar i allmänhet) möjliggör att utgången från ett kommando riktas som inmatning till ett annat inklusive tilldelning till en variabel.
> $message = Write-Output "Hello World"
> $message
"Hello World"
Dessa liknande funktioner är inte alias, men kan ge samma resultat om man vill undvika att "förorena" framgångsströmmen.
Write-Output
är alias till Echo
eller Write
Echo 'Hello world'
Write 'Hello world'
Eller genom att bara skriva "Hej världen"!
'Hello world'
Allt detta kommer att resultera med den förväntade konsolutgången
Hello world
Ett annat exempel på alias i PowerShell är den vanliga kartläggningen av både äldre kommandotolkskommandon och BASH-kommandon till PowerShell cmdlets. Alla följande skapar en kataloglista över den aktuella katalogen.
C:\Windows> dir
C:\Windows> ls
C:\Windows> Get-ChildItem
Slutligen kan du skapa ditt eget alias med cmdlet Set-Alias! Låt oss som exempel Test-NetConnection
, som i huvudsak är PowerShell motsvarande kommandotolkens ping-kommando, till "ping".
Set-Alias -Name ping -Value Test-NetConnection
Nu kan du använda ping
istället för Test-NetConnection
! Var medveten om att om aliaset redan används kommer du att skriva över föreningen.
Aliaset kommer att leva tills sessionen är aktiv. När du stänger sessionen och försöker köra aliaset som du har skapat under din senaste session kommer det inte att fungera. För att lösa problemet kan du importera alla dina alias från en excel till din session en gång innan du börjar arbetet.
Rörledningen - Använd utdata från en PowerShell-cmdlet
En av de första frågorna som människor har när de börjar använda PowerShell för skript är hur man manipulerar utdata från en cmdlet för att utföra en annan åtgärd.
Rörledningssymbolen |
används i slutet av en cmdlet för att ta data som den exporterar och mata dem till nästa cmdlet. Ett enkelt exempel är att använda Select-Object för att bara visa Namnegenskapen för en fil som visas från Get-ChildItem:
Get-ChildItem | Select-Object Name
#This may be shortened to:
gci | Select Name
Mer avancerad användning av rörledningen gör det möjligt för oss att leda utgången från en cmdlet till en förhandslinga:
Get-ChildItem | ForEach-Object {
Copy-Item -Path $_.FullName -destination C:\NewDirectory\
}
#This may be shortened to:
gci | % { Copy $_.FullName C:\NewDirectory\ }
Observera att exemplet ovan använder den automatiska variabeln $ _. $ _ är det korta aliaset till $ PSItem, som är en automatisk variabel som innehåller det aktuella objektet i pipeline.
kommentar
För att kommentera kraftskript genom att förbereda linjen med symbolen #
(hash)
# This is a comment in powershell
Get-ChildItem
Du kan också ha kommentarer med flera linjer med hjälp av <#
och #>
i början och slutet av kommentaren.
<#
This is a
multi-line
comment
#>
Get-ChildItem
Ringer .Net-biblioteksmetoder
Statiska .Net-biblioteksmetoder kan anropas från PowerShell genom att kapsla in hela klassens namn i tredje fästen och sedan ringa metoden med hjälp av ::
#calling Path.GetFileName()
C:\> [System.IO.Path]::GetFileName('C:\Windows\explorer.exe')
explorer.exe
Statiska metoder kan kallas från själva klassen, men att ringa icke-statiska metoder kräver en instans av klassen .Net (ett objekt).
Till exempel kan inte AddHours-metoden anropas från klassen System.DateTime själv. Det kräver en instans av klassen:
C:\> [System.DateTime]::AddHours(15)
Method invocation failed because [System.DateTime] does not contain a method named 'AddHours'.
At line:1 char:1
+ [System.DateTime]::AddHours(15)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound
I det här fallet skapar vi först ett objekt , till exempel:
C:\> $Object = [System.DateTime]::Now
Sedan kan vi använda metoder för det objektet, även metoder som inte kan kallas direkt från klassen System.DateTime, som AddHours-metoden:
C:\> $Object.AddHours(15)
Monday 12 September 2016 01:51:19
Skapa objekt
New-Object
cmdlet används för att skapa ett objekt.
# Create a DateTime object and stores the object in variable "$var"
$var = New-Object System.DateTime
# calling constructor with parameters
$sr = New-Object System.IO.StreamReader -ArgumentList "file path"
I många fall skapas ett nytt objekt för att exportera data eller skicka det till en annan kommandot. Detta kan göras så:
$newObject = New-Object -TypeName PSObject -Property @{
ComputerName = "SERVER1"
Role = "Interface"
Environment = "Production"
}
Det finns många sätt att skapa ett objekt. Följande metod är förmodligen det kortaste och snabbaste sättet att skapa ett PSCustomObject
:
$newObject = [PSCustomObject]@{
ComputerName = 'SERVER1'
Role = 'Interface'
Environment = 'Production'
}
Om du redan har ett objekt, men bara behöver en eller två extra egenskaper, kan du helt enkelt lägga till den egenskapen med hjälp av Select-Object
:
Get-ChildItem | Select-Object FullName, Name,
@{Name='DateTime'; Expression={Get-Date}},
@{Name='PropertieName'; Expression={'CustomValue'}}
Alla objekt kan lagras i variabler eller skickas in i pipeline. Du kan också lägga till dessa objekt i en samling och sedan visa resultaten i slutet.
Samlingar av objekt fungerar bra med Export-CSV (och Import-CSV). Varje rad i CSV är ett objekt, varje kolumn är en egenskap.
Formatkommandon konverterar objekt till textström för visning. Undvik att använda Format- * -kommandon tills det sista steget i databehandling för att behålla objekternas användbarhet.