Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kort beskrivning
Beskriver hur du använder metoder för att utföra åtgärder på objekt i PowerShell.
Lång beskrivning
PowerShell använder objekt för att representera objekten i datalager eller datorns tillstånd. Till exempel representerar FileInfo-objekt filerna i filsystemenheter och ProcessInfo-objekt representerar processerna på datorn.
Objekt har egenskaper som lagrar data om objektet och metoder som gör att du kan ändra objektet.
En "metod" är en uppsättning instruktioner som anger en åtgärd som du kan utföra på objektet. Till exempel innehåller FileInfo-objektet metoden CopyTo som kopierar filen som FileInfo-objektet representerar.
Om du vill hämta metoderna för ett objekt använder du cmdleten Get-Member. Använd egenskapen MemberType med värdet "Metod". Följande kommando hämtar metoderna för processobjekt.
Get-Process | Get-Member -MemberType Method
TypeName: System.Diagnostics.Process
Name                      MemberType Definition
----                      ---------- ----------
BeginErrorReadLine        Method     System.Void BeginErrorReadLine()
BeginOutputReadLine       Method     System.Void BeginOutputReadLine()
...
Kill                      Method     System.Void Kill()
Refresh                   Method     System.Void Refresh()
Start                     Method     bool Start()
ToString                  Method     string ToString()
WaitForExit               Method     bool WaitForExit(int milliseconds), ...
WaitForInputIdle          Method     bool WaitForInputIdle(int millisecon...
Om du vill utföra eller "anropa" en metod för ett objekt skriver du en punkt (.), metodnamnet och en uppsättning parenteser "()". Om metoden har argument placerar du argumentvärdena inom parenteserna. Parenteserna krävs för varje metodanrop, även om det inte finns några argument. Om metoden tar flera argument bör de avgränsas med kommatecken.
Följande kommando anropar till exempel metoden Kill för processer för att avsluta Anteckningar-processen på datorn.
$notepad = Get-Process notepad
$notepad.Kill()
Det här exemplet kan förkortas genom att kombinera ovanstående instruktioner.
(Get-Process Notepad).Kill()
Kommandot Get-Process omges av parenteser för att säkerställa att det körs innan metoden Kill anropas. Metoden Kill anropas sedan på det returnerade Process objektet.
En annan mycket användbar metod är Replace strängmetoden. Metoden Replace ersätter text i en sträng. I exemplet nedan kan punkten (.) placeras direkt efter strängens slutcitat.
'this is rocket science'.Replace('rocket', 'rock')
this is rock science
Som du ser i föregående exempel kan du anropa en metod för ett objekt som du får med hjälp av ett kommando, ett objekt i en variabel eller något som resulterar i ett objekt (t.ex. en sträng inom citattecken).
Från och med PowerShell 4.0 stöds metodanrop med hjälp av dynamiska metodnamn.
Lär dig mer om metoder
Om du vill hitta definitioner av metoderna för ett objekt går du till hjälpavsnittet för objekttypen i MSDN och letar efter dess metodsida. På följande sida beskrivs till exempel metoderna för processobjekt System.Diagnostics.Process.
Om du vill fastställa argumenten för en metod läser du metoddefinitionen, som liknar syntaxdiagrammet för en PowerShell-cmdlet.
En metoddefinition kan ha en eller flera metodsignaturer, som liknar parameteruppsättningarna för PowerShell-cmdletar. Signaturerna visar alla giltiga format för kommandon för att anropa metoden.
Metoden CopyTo för klassen FileInfo innehåller till exempel följande två metodsignaturer:
    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)
Den första metodsignaturen tar målfilens namn (och en sökväg). I följande exempel används den första metoden CopyTo för att kopiera Final.txt-filen till katalogen C:\Bin.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")
Anmärkning
Till skillnad från PowerShells argument läge körs objektmetoder i uttryck läge, vilket är en direktströmning till .NET-ramverket som PowerShell bygger på. I -uttryck tillåts inte läge bareword argument (ej citattecken). Du kan se detta i differenssökvägen som en parameter, jämfört med sökvägen som ett argument. Du kan läsa mer om parsningslägen i about_Parsing
Den andra metodsignaturen får ett målfilnamn och ett booleskt värde som avgör om målfilen ska skrivas över, om den redan finns.
I följande exempel används den andra metoden CopyTo för att kopiera Final.txt-filen till katalogen C:\Bin och skriva över befintliga filer.
(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)
Metoder för skalära objekt och samlingar
Metoderna för ett ("skalärt") objekt av en viss typ skiljer sig ofta från metoderna för en samling objekt av samma typ.
Varje process har till exempel en Kill metod, men en samling processer har ingen Kill metod.
Från och med PowerShell 3.0 försöker PowerShell förhindra skriptfel som beror på olika metoder för skalära objekt och samlingar.
Om du skickar en samling, men begär en metod som bara finns på enskilda ("skalära") objekt, anropar PowerShell metoden på varje objekt i samlingen.
Om metoden finns på de enskilda objekten och i samlingen anropas endast samlingens metod.
Den här funktionen fungerar även på egenskaper för skalära objekt och samlingar. Mer information finns i about_Properties.
Exempel
I följande exempel körs metoden Kill för enskilda processobjekt på en samling processobjekt. Det här exemplet fungerar bara på PowerShell 3.0 och senare versioner av PowerShell.
Det första kommandot startar tre instanser av Anteckningar-processen. Det andra kommandot använder Get-Process kommandot för att hämta alla tre instanserna av Notepad-processen och spara dem i den $p variabeln.
Notepad; Notepad; Notepad
$p = Get-Process Notepad
Det tredje kommandot använder egenskapen Count för alla samlingar för att verifiera att det finns tre processer i den $p variabeln.
$p.Count
3
Det fjärde kommandot kör metoden Kill på alla tre processerna i variabeln $p.
Det här kommandot fungerar även om en samling processer inte har någon Kill metod.
$p.Kill()
Det femte kommandot använder Get-Process kommandot för att bekräfta att Kill kommandot fungerade.
Get-Process Notepad
Get-Process : Cannot find a process with the name "notepad". Verify the proc
ess name and call the cmdlet again.
At line:1 char:12
+ Get-Process <<<<  notepad
    + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process]
, ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShel
l.Commands.GetProcessCommand
Om du vill utföra samma uppgift på PowerShell 2.0 använder du cmdleten Foreach-Object för att köra metoden på varje objekt i samlingen.
$p | ForEach-Object {$_.Kill()}
ForEach- och Where-metoder
Från och med PowerShell 4.0 stöds samlingsfiltrering med hjälp av en metodsyntax. På så sätt kan du använda två nya metoder när du hanterar samlingar ForEach och Where.
Du kan läsa mer om dessa metoder i about_arrays