Maybaygiare.org

Blog Network

nieuw-Object PSObject vs.PSCustomObject

Er is vaak enige verwarring met betrekking tot de verschillen tussen het gebruik van nieuw-Object PSObject en PSCustomObject, evenals hoe de twee werken.

beide benaderingen kunnen worden gebruikt om een reeks waarden uit een verzameling PowerShell-objecten te nemen en ze samen te stellen in een enkele uitvoer. Ook, beide wegen zal de output van de gegevens als NoteProperties in het systeem.Management.Automatisering.Pscustomobject objecttypen. Wat is het probleem tussen hen?

om te beginnen werd de cmdlet nieuw Object geïntroduceerd in PowerShell v1.0 en is gegaan door een aantal wijzigingen, terwijl het gebruik van de pscustomobject klasse kwam later in v3.0. Voor systemen die PowerShell v2.0 of eerder gebruiken, moet nieuw-Object worden gebruikt. Het belangrijkste verschil tussen de 2.0 versie en 1.0 versie vanuit een administratief oogpunt is dat 2.0 het gebruik van hash tabellen toestaat. Bijvoorbeeld:

$Path = "c:\scripts"
$Directory = Get-Acl -Path $Path
ForEach ($Dir in $Directory.Access){
$DirPermissions = New-Object -TypeName PSObject
$DirPermissions | Add-Member -MemberType NoteProperty -Name Path -Value $Path
$DirPermissions | Add-Member -MemberType NoteProperty -Name Owner -Value $Directory.Owner
$DirPermissions | Add-Member -MemberType NoteProperty -Name Group -Value $Dir.IdentityReference
$DirPermissions | Add-Member -MemberType NoteProperty -Name AccessType -Value $Dir.AccessControlType
$DirPermissions | Add-Member -MemberType NoteProperty -Name Rights -Value $Dir.FileSystemRights
$DirPermissions
}

met de methode nieuw-Object in PowerShell v1.0, moet u het objecttype dat u wilt maken declareren en leden toevoegen aan de verzameling in individuele commando ‘ s. Dit veranderde echter in v2.0 met de mogelijkheid tot het gebruik van hashtables:

Nieuwe-Object in PS 2.0

$Path = "c:\scripts"
$Directory = Get-Acl -Path $Path
ForEach ($Dir in $Directory.Access){
$DirPermissions = New-Object -TypeName PSObject -Property @{
'Path' = $Path
'Owner' = $Directory.Owner
'Group' = $Dir.IdentityReference
'AccessType' = $Dir.AccessControlType
'Rights' = $Dir.FileSystemRights
}
$DirPermissions
}

Hier is de output:

Opmerking theorder van de output versus de orde in de hash-tabel

Dit bespaard een hoop overhead in te typen en op voorwaarde dat een reiniger op zoek script. Echter, beide methoden hebben hetzelfde probleem in die zin dat de uitvoer is niet noodzakelijkerwijs in dezelfde volgorde als je het hebt vermeld, dus als je op zoek bent naar een bepaald formaat, het kan niet werken. PSCustomObject heeft dit opgelost toen het werd geà ntroduceerd in v3.0, samen met het bieden van meer stroomlijning in uw scripts.

PSCustomObject in PowerShell v3.0

$Path = "c:\scripts"
$Directory = Get-Acl -Path $Path
ForEach ($Dir in $Directory.Access){
@{
Path = $Path
Owner = $Directory.Owner
Group = $Dir.IdentityReference
AccessType = $Dir.AccessControlType
Rights = $Dir.FileSystemRights
}#EndPSCustomObject
}#EndForEach
noteer de volgorde van de eigenschappen

zoals aangetoond, zal uw uitvoer altijd overeenkomen met wat u hebt gedefinieerd in uw Hashtable. Een ander voordeel van het gebruik van PSCustomObject is dat het is opgemerkt om de gegevens sneller op te sommen dan zijn nieuwe object tegenhanger. Het enige wat je in gedachten moet houden met PSCustomObject is dat het niet zal werken met systemen die PSv2.0 of eerder draaien.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.