Maybaygiare.org

Blog Network

New-Object PSObject vs. PSCustomObject

există adesea unele confuzii în ceea ce privește diferențele dintre utilizarea New-Object PSObject și PSCustomObject, precum și modul în care cele două de lucru.

oricare dintre abordări poate fi utilizată pentru a lua un set de valori dintr-o colecție de obiecte PowerShell și a le colaționa într-o singură ieșire. De asemenea, ambele căi vor afișa datele ca Noteproprietăți în sistem.Management.Automatizare.Tipuri de obiecte PSCustomObject. Deci, ce e mare scofală între ei?

pentru început, cmdletul cu obiecte noi a fost introdus în PowerShell v1.0 și a trecut printr-o serie de modificări, în timp ce utilizarea clasei PSCustomObject a venit mai târziu în v3.0. Pentru sistemele care utilizează PowerShell v2.0 sau o versiune anterioară, trebuie utilizat un obiect nou. Diferența cheie dintre versiunea 2.0 și versiunea 1.0 din punct de vedere administrativ este că 2.0 permite utilizarea tabelelor hash. De exemplu:

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

cu metoda New-Object din PowerShell v1.0, trebuie să declarați tipul de obiect pe care doriți să îl creați și să adăugați membri în colecție în comenzi individuale. Acest lucru s-a schimbat însă în v2.0 cu capacitatea de a utiliza hashtables:

nou-obiect în 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
}

Iată de ieșire:

nota theorder de ieșire vs ordine în tabelul hash

Acest lucru a salvat o mulțime de aeriene în tastarea și a oferit un script curat în căutarea. Cu toate acestea, ambele metode au aceeași problemă prin faptul că ieșirea nu este neapărat în aceeași ordine în care o aveți listată, deci dacă căutați un anumit format, este posibil să nu funcționeze. PSCustomObject fix acest lucru atunci când a fost introdus în v3.0, împreună cu furnizarea de mai eficientizarea în script-uri.

PSCustomObject în 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

notă ordinea proprietăților

după cum s-a demonstrat, rezultatul dvs. se va potrivi întotdeauna cu ceea ce ați definit în hashtable. Un alt avantaj al utilizării PSCustomObject este că a fost observat pentru a enumera datele mai repede decât omologul său nou-obiect. Singurul lucru de reținut cu PSCustomObject este că nu va funcționa cu sistemele care rulează PSv2.0 sau mai devreme.

Lasă un răspuns

Adresa ta de email nu va fi publicată.