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 $PathForEach ($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 $PathForEach ($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:
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 $PathForEach ($Dir in $Directory.Access){@{Path = $PathOwner = $Directory.OwnerGroup = $Dir.IdentityReferenceAccessType = $Dir.AccessControlTypeRights = $Dir.FileSystemRights}#EndPSCustomObject}#EndForEach
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.