Maybaygiare.org

Blog Network

New-Object PSObject vs. PSCustomObject

gyakran van némi zavar a new-Object PSObject és a PSCustomObject használata közötti különbségekben, valamint a kettő működésében.

bármelyik megközelítés használható arra, hogy a PowerShell objektumok gyűjteményéből egy értékhalmazt vegyen fel, és egyetlen kimenetre rendezze őket. Ezenkívül mindkét út az adatokat NoteProperties-ként adja ki a rendszerben.Menedzsment.Automatizálás.PSCustomObject objektum típusok. Szóval mi a nagy ügy közöttük?

kezdetnek A New-Object parancsmagot a PowerShell v1-ben vezették be.0 és ment keresztül számos változás, míg a használata a PSCustomObject osztály jött később v3.0. A PowerShell v2.0 vagy korábbi rendszert használó rendszereknél a New-Object-et kell használni. A legfontosabb különbség a 2.0 és az 1.0 verzió között adminisztratív szempontból az, hogy a 2.0 lehetővé teszi a hash táblák használatát. Például:

$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
}

A New-Object metódussal a PowerShell v1.0-ban deklarálni kell a létrehozni kívánt objektumtípust, és külön parancsokban hozzá kell adni a tagokat a gyűjteményhez. Ez azonban megváltozott a v2-ben.0 a hashtables használatának képességével:

új objektum a PS 2.0-ban

$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
}

itt van a kimenet:

megjegyzés theorder output vs.érdekében a hash tábla

Ez mentett egy csomó rezsi gépelés és feltéve, hogy egy tisztább kinézetű script. Mindkét módszernek azonban ugyanaz a problémája, hogy a kimenet nem feltétlenül ugyanabban a sorrendben van, mint ahogy felsorolta, tehát ha egy adott formátumot keres, akkor előfordulhat, hogy nem működik. PSCustomObject fix ezt, amikor bevezették a v3.0, valamint hogy több ésszerűsítése a szkripteket.

PSCustomObject a PowerShell v3-ban.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

vegye figyelembe a tulajdonságok sorrendjét

mint látható, a kimenet mindig megegyezik azzal, amit a hashtable-ben definiált. A PSCustomObject használatának másik előnye, hogy megjegyezték, hogy az adatokat gyorsabban sorolja fel, mint az új objektum megfelelője. A PSCustomObject esetében Csak azt kell szem előtt tartani, hogy nem fog működni a PSv2.0 vagy korábbi rendszert futtató rendszerekkel.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.