Delen via


Over methoden

Korte beschrijving

Hierin wordt beschreven hoe u methoden gebruikt om acties uit te voeren op objecten in PowerShell.

Lange beschrijving

PowerShell gebruikt objecten om de items in gegevensarchieven of de status van de computer weer te geven. FileInfo-objecten vertegenwoordigen bijvoorbeeld de bestanden in bestandssysteemstations en ProcessInfo-objecten vertegenwoordigen de processen op de computer.

Objecten hebben eigenschappen, waarmee gegevens over het object worden opgeslagen, en methoden waarmee u het object kunt wijzigen.

Een 'methode' is een reeks instructies waarmee een actie wordt opgegeven die u op het object kunt uitvoeren. Het -object bevat bijvoorbeeld FileInfo de CopyTo methode waarmee het bestand wordt gekopieerd dat het FileInfo object vertegenwoordigt.

Gebruik Get-Member de cmdlet om de methoden van een object op te halen. Gebruik de eigenschap MemberType met de waarde 'Methode'. Met de volgende opdracht worden de methoden van procesobjecten opgehaald.

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...

Als u een methode van een object wilt uitvoeren of 'aanroepen', typt u een punt (.), de methodenaam en een set haakjes '()'. Als de methode argumenten heeft, plaatst u de argumentwaarden tussen de haakjes. De haakjes zijn vereist voor elke methode-aanroep, zelfs als er geen argumenten zijn. Als de methode meerdere argumenten gebruikt, moeten deze worden gescheiden door komma's.

Met de volgende opdracht wordt bijvoorbeeld de methode Kill van processen aangeroepen om het Kladblok-proces op de computer te beëindigen.

$notepad = Get-Process notepad
$notepad.Kill()

Dit voorbeeld kan worden ingekort door de bovenstaande instructies te combineren.

(Get-Process Notepad).Kill()

De Get-Process opdracht staat tussen haakjes om ervoor te zorgen dat deze wordt uitgevoerd voordat de methode Kill wordt aangeroepen. De Kill methode wordt vervolgens aangeroepen op het geretourneerde Process object.

Een andere zeer nuttige methode is de Replace methode van tekenreeksen. De Replace methode vervangt tekst in een tekenreeks. In het onderstaande voorbeeld kan de punt (.) direct na het eindcitaat van de tekenreeks worden geplaatst.

'this is rocket science'.Replace('rocket', 'rock')
this is rock science

Zoals u in de vorige voorbeelden kunt zien, kunt u een methode aanroepen voor een object dat u ophaalt met behulp van een opdracht, een object in een variabele of iets anders dat resulteert in een object (zoals een tekenreeks tussen aanhalingstekens).

Vanaf PowerShell 4.0 wordt het aanroepen van methoden met behulp van dynamische methodenamen ondersteund.

Meer informatie over methoden

Als u definities van de methoden van een object wilt vinden, gaat u naar het Help-onderwerp voor het objecttype in MSDN en zoekt u naar de pagina met methoden. Op de volgende pagina worden bijvoorbeeld de methoden van procesobjecten System.Diagnostics.Process beschreven.

Als u de argumenten van een methode wilt bepalen, bekijkt u de methodedefinitie, die lijkt op het syntaxisdiagram van een PowerShell-cmdlet.

Een methodedefinitie kan een of meer methodehandtekeningen hebben, die lijken op de parametersets van PowerShell-cmdlets. De handtekeningen tonen alle geldige indelingen van opdrachten om de methode aan te roepen.

De methode van de FileInfo klasse bevat bijvoorbeeld CopyTo de volgende twee methodehandtekeningen:

    CopyTo(String destFileName)
    CopyTo(String destFileName, Boolean overwrite)

De eerste methodehandtekening neemt de naam van het doelbestand (en een pad). In het volgende voorbeeld wordt de eerste CopyTo methode gebruikt om het Final.txt bestand naar de C:\Bin map te kopiëren.

(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt")

Notitie

In tegenstelling tot de argumentmodus van PowerShell worden objectmethoden uitgevoerd in de expressiemodus . Dit is een pass-through naar het .NET-framework waarop PowerShell is gebouwd. In de expressiemodus zijn bareword-argumenten (tekenreeksen zonder aanhalingstekens) niet toegestaan. U kunt dit zien in het verschilpad als een parameter, versus het pad als een argument. Meer informatie over parseringsmodi vindt u in about_Parsing

De tweede methodehandtekening neemt een doelbestandsnaam en een Booleaanse waarde die bepaalt of het doelbestand moet worden overschreven, als het al bestaat.

In het volgende voorbeeld wordt de tweede CopyTo methode gebruikt om het Final.txt bestand naar de C:\Bin map te kopiëren en bestaande bestanden te overschrijven.

(Get-ChildItem c:\final.txt).CopyTo("c:\bin\final.txt", $true)

Methoden van Scalaire objecten en verzamelingen

De methoden van een (scalair) object van een bepaald type verschillen vaak van de methoden van een verzameling objecten van hetzelfde type.

Elk proces heeft bijvoorbeeld een Kill methode, maar een verzameling processen heeft geen kill-methode.

Vanaf PowerShell 3.0 probeert PowerShell scriptfouten te voorkomen die het gevolg zijn van de verschillende methoden van scalaire objecten en verzamelingen.

Als u een verzameling verzendt, maar een methode aanvraagt die alleen bestaat voor één (scalaire) objecten, roept PowerShell de methode aan voor elk object in de verzameling.

Als de methode bestaat voor de afzonderlijke objecten en voor de verzameling, wordt alleen de methode van de verzameling aangeroepen.

Deze functie werkt ook op eigenschappen van scalaire objecten en verzamelingen. Zie about_Properties voor meer informatie.

Voorbeelden

In het volgende voorbeeld wordt de methode Kill van afzonderlijke procesobjecten uitgevoerd op een verzameling procesobjecten. Dit voorbeeld werkt alleen in PowerShell 3.0 en latere versies van PowerShell.

Met de eerste opdracht worden drie exemplaren van het Kladblok-proces gestart. De tweede opdracht gebruikt de Get-Process opdracht om alle drie de exemplaren van het Kladblok-proces op te halen en op te slaan in de $p variabele.

Notepad; Notepad; Notepad
$p = Get-Process Notepad

De derde opdracht gebruikt de eigenschap Count van alle verzamelingen om te controleren of de variabele $p drie processen bevat.

$p.Count
3

Met de vierde opdracht wordt de methode Kill uitgevoerd op alle drie de processen in de variabele $p.

Deze opdracht werkt ook als een verzameling processen geen methode heeft Kill .

$p.Kill()

De vijfde opdracht gebruikt de opdracht Get-Process om te bevestigen dat de Kill opdracht heeft gewerkt.

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

Als u dezelfde taak wilt uitvoeren in PowerShell 2.0, gebruikt u de Foreach-Object cmdlet om de methode uit te voeren op elk object in de verzameling.

$p | ForEach-Object {$_.Kill()}

ForEach- en Where-methoden

Vanaf PowerShell 4.0 wordt het filteren van verzamelingen met behulp van een methodesyntaxis ondersteund. Hiermee kunt u twee nieuwe methoden gebruiken bij het werken met verzamelingen ForEach en Where.

Meer informatie over deze methoden vindt u in about_arrays

Zie ook

about_Objects

about_Properties

Get-Member