Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Korte beschrijving
Hierin wordt uitgelegd hoe u objecten maakt in PowerShell.
Lange beschrijving
U kunt objecten maken in PowerShell en de objecten gebruiken die u maakt in opdrachten en scripts.
Er zijn veel manieren om objecten te maken. Deze lijst is niet definitief:
- New-Object: Hiermee maakt u een exemplaar van een .NET Framework-object of COM-object.
- Import-Csv-/ConvertFrom-Csv-: Hiermee maakt u aangepaste objecten (PSCustomObject) op basis van de items die zijn gedefinieerd als door tekens gescheiden waarden.
- ConvertFrom-Json-: hiermee maakt u aangepaste objecten die zijn gedefinieerd in JavaScript Object Notation (JSON).
- ConvertFrom-StringData-: hiermee maakt u aangepaste objecten die zijn gedefinieerd als sleutel-waardeparen.
-
Add-Type: Hiermee kunt u een klasse definiëren in uw PowerShell-sessie die u met
New-Objectkunt instantiëren. - New-Module: De parameter AsCustomObject maakt een aangepast object dat u definieert met behulp van scriptblock.
-
add-member: voegt eigenschappen toe aan bestaande objecten. U kunt
Add-Membergebruiken om een aangepast object te maken op basis van een eenvoudig type, zoals[System.Int32]. -
select-object: selecteert eigenschappen voor een object. U kunt
Select-Objectgebruiken om aangepaste en berekende eigenschappen te maken voor een al geïnstantieerd object.
In dit artikel worden de volgende aanvullende methoden behandeld:
- Door de constructor van een type aan te roepen met behulp van een statische
new()methode - Door hashtabellen van eigenschapsnamen en eigenschapswaarden te typecasten
Methode Static new()
Alle .NET-typen hebben een new() methode waarmee u eenvoudiger exemplaren kunt maken. U kunt ook alle beschikbare constructors voor een bepaald type zien.
Als u de constructors voor een type wilt zien, geeft u de naam van de new methode op na de naam van het type en drukt u op <ENTER>.
[System.Uri]::new
OverloadDefinitions
-------------------
uri new(string uriString)
uri new(string uriString, bool dontEscape)
uri new(uri baseUri, string relativeUri, bool dontEscape)
uri new(string uriString, System.UriKind uriKind)
uri new(uri baseUri, string relativeUri)
uri new(uri baseUri, uri relativeUri)
U kunt nu een System.Uri- maken door de juiste constructor op te geven.
[System.Uri]::new("https://www.bing.com")
AbsolutePath : /
AbsoluteUri : https://www.bing.com/
LocalPath : /
Authority : www.bing.com
...
U kunt het volgende voorbeeld gebruiken om te bepalen welke .NET-typen momenteel worden geladen om te instantiëren.
[AppDomain]::CurrentDomain.GetAssemblies() |
ForEach-Object {
$_.GetExportedTypes() |
ForEach-Object { $_.FullName }
}
Objecten die zijn gemaakt met behulp van de methode new() hebben mogelijk niet dezelfde eigenschappen als objecten van hetzelfde type dat door PowerShell-cmdlets worden gemaakt. PowerShell-cmdlets, providers en uitgebreid typesysteem kunnen extra eigenschappen toevoegen aan het exemplaar.
De bestandssysteemprovider in PowerShell voegt bijvoorbeeld zes NoteProperty--waarden toe aan het DirectoryInfo--object dat door Get-Itemwordt geretourneerd.
$PSDirInfo = Get-Item /
$PSDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
4 CodeProperty
13 Property
6 NoteProperty
1 ScriptProperty
18 Method
Wanneer u rechtstreeks een DirectoryInfo-object maakt, beschikt het niet over die zes NoteProperty waarden.
$NewDirInfo = [System.IO.DirectoryInfo]::new('/')
$NewDirInfo | Get-Member | Group-Object MemberType | Select-Object Count, Name
Count Name
----- ----
4 CodeProperty
13 Property
1 ScriptProperty
18 Method
Zie about_Types.ps1xmlvoor meer informatie over het uitgebreide typesysteem.
Deze functie is toegevoegd in PowerShell 5.0
Objecten maken op afstand van hashtabellen
U kunt een object maken op basis van een hash-tabel met eigenschappen en eigenschapswaarden.
De syntaxis is als volgt:
[<class-name>]@{
<property-name>=<property-value>
<property-name>=<property-value>
}
Deze methode werkt alleen voor klassen met een parameterloze constructor. De objecteigenschappen moeten openbaar en ingesteld zijn.
Deze functie is toegevoegd in PowerShell versie 3.0
Aangepaste objecten maken van hashtabellen
Aangepaste objecten zijn erg nuttig en zijn eenvoudig te maken met behulp van de hash-tabelmethode. De PSCustomObject klasse is speciaal ontworpen voor dit doel.
Aangepaste objecten zijn een uitstekende manier om aangepaste uitvoer van een functie of script te retourneren. Dit is handiger dan het retourneren van opgemaakte uitvoer die niet opnieuw kan worden opgemaakt of doorgesluisd naar andere opdrachten.
De opdrachten in het Test-Object function enkele variabelewaarden instellen en deze waarden vervolgens gebruiken om een aangepast object te maken. U kunt dit object in gebruik zien in de voorbeeldsectie van het help-onderwerp Update-Help cmdlet.
function Test-Object {
$ModuleName = "PSScheduledJob"
$HelpCulture = "en-US"
$HelpVersion = "3.1.0.0"
[pscustomobject]@{
"ModuleName"=$ModuleName
"UICulture"=$HelpCulture
"Version"=$HelpVersion
}
$ModuleName = "PSWorkflow"
$HelpCulture = "en-US"
$HelpVersion = "3.0.0.0"
[pscustomobject]@{
"ModuleName"=$ModuleName
"UICulture"=$HelpCulture
"Version"=$HelpVersion
}
}
Test-Object
De uitvoer van deze functie is standaard een verzameling aangepaste objecten die zijn opgemaakt als een tabel.
ModuleName UICulture Version
--------- --------- -------
PSScheduledJob en-US 3.1.0.0
PSWorkflow en-US 3.0.0.0
Gebruikers kunnen de eigenschappen van de aangepaste objecten net als bij standaardobjecten beheren.
(Test-Object).ModuleName
PSScheduledJob
PSWorkflow
PSObject-typeobjecten de lijst met leden onderhouden in de volgorde waarin de leden aan het object zijn toegevoegd. Hoewel Hashtable objecten niet de volgorde van de sleutel-waardeparen garanderen, wordt een letterlijke hashtabel naar [pscustomobject] de volgorde behouden.
De hashtabel moet een letterlijke naam zijn. Als u de hashtabel tussen haakjes verpakt of als u een variabele met een hashtabel cast, is er geen garantie dat de volgorde behouden blijft.
$hash = @{
Name = "Server30"
System = "Server Core"
PSVersion = "4.0"
}
$Asset = [pscustomobject]$hash
$Asset
System Name PSVersion
------ ---- ---------
Server Core Server30 4.0
Niet-aangepaste objecten maken vanuit hash-tabellen
U kunt ook hashtabellen gebruiken om objecten te maken voor niet-aangepaste klassen. Wanneer u een object maakt voor een niet-aangepaste klasse, is de naamruimte-gekwalificeerde typenaam vereist, hoewel u een eerste System naamruimteonderdeel mag weglaten.
Met de volgende opdracht maakt u bijvoorbeeld een sessieoptieobject.
[System.Management.Automation.Remoting.PSSessionOption]@{
IdleTimeout=43200000
SkipCnCheck=$true
}
De vereisten van de hash-tabelfunctie, met name de constructorvereiste zonder parameters, elimineren veel bestaande klassen. De meeste PowerShell-optie klassen zijn echter ontworpen om met deze functie te werken, evenals andere zeer nuttige klassen, zoals de ProcessStartInfo klasse.
[System.Diagnostics.ProcessStartInfo]@{
CreateNoWindow="$true"
Verb="run as"
}
Arguments :
ArgumentList : {}
CreateNoWindow : True
EnvironmentVariables : {OneDriveConsumer, PROCESSOR_ARCHITECTURE,
CommonProgramFiles(x86), APPDATA...}
Environment : {[OneDriveConsumer, C:\Users\user1\OneDrive],
[PROCESSOR_ARCHITECTURE, AMD64],
[CommonProgramFiles(x86),
C:\Program Files (x86)\Common Files],
[APPDATA, C:\Users\user1\AppData\Roaming]...}
RedirectStandardInput : False
RedirectStandardOutput : False
RedirectStandardError : False
...
U kunt ook de hashtabelfunctie gebruiken bij het instellen van parameterwaarden. Bijvoorbeeld de waarde van de parameter SessionOption van de New-PSSession.
cmdlet kan een hash-tabel zijn.
New-PSSession -ComputerName Server01 -SessionOption @{
IdleTimeout=43200000
SkipCnCheck=$true
}
Register-ScheduledJob -Name Test -FilePath .\Get-Inventory.ps1 -Trigger @{
Frequency="Daily"
At="15:00"
}
Algemene objecten
U kunt ook algemene objecten maken in PowerShell. Generics zijn klassen, structuren, interfaces en methoden met tijdelijke aanduidingen (typeparameters) voor een of meer van de typen die ze opslaan of gebruiken.
In het volgende voorbeeld wordt een Dictionary-object gemaakt.
$dict = New-Object 'System.Collections.Generic.Dictionary[String,Int]'
$dict.Add("One", 1)
$dict
Key Value
--- -----
One 1
Zie Generics in .NETvoor meer informatie over generics.