Maybaygiare.org

Blog Network

New-Object PSObject vs PSCustomObject

det er ofte litt forvirring med hensyn til forskjellene mellom Å bruke New-Object PSObject Og PSCustomObject, samt hvordan de to fungerer.

enten tilnærming kan brukes til å ta et sett med verdier fra En samling Av PowerShell-objekter og sortere dem i en enkelt utgang. I tillegg vil begge veier sende dataene som Noteegenskaper i Systemet.Management.Automatisering.PSCustomObject-objekttyper. Så hva er big deal mellom dem?

For det første Ble Cmdleten New-Object introdusert I PowerShell v1.0 og har gått gjennom en rekke endringer, mens bruken av PSCustomObject-klassen kom senere i v3. 0. For systemer som bruker PowerShell v2.0 eller tidligere, Må New-Object brukes. Hovedforskjellen mellom 2.0-versjonen og 1.0-versjonen fra et administrativt synspunkt er at 2.0 tillater bruk av hash-tabeller. For eksempel:

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

Med Metoden New-Object i PowerShell v1. 0 må du deklarere objekttypen du vil opprette og legge til medlemmer i samlingen i individuelle kommandoer. Dette endret seg imidlertid i v2.0 med muligheten til å bruke hashtables:

Nytt Objekt I 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
}

notatordrer for utgang vs. ordre i hash-tabellen

dette lagret mye overhead i å skrive og ga et renere utseende skript. Begge metodene har imidlertid det samme problemet ved at utdataene ikke nødvendigvis er i samme rekkefølge som du har oppført, så hvis du leter etter et bestemt format, kan det hende at det ikke fungerer. PSCustomObject løst dette da det ble introdusert i v3.0, sammen med å gi mer effektivisering i skriptene dine.

PSCustomObject i 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

Merk rekkefølgen på egenskapene

som vist vil utdataene dine alltid samsvare med det du har definert i hashtabellen din. En annen fordel med Å bruke PSCustomObject er at det har blitt notert å oppregne dataene raskere enn Sin New-Object-motpart. Det eneste du må huske på Med PSCustomObject er at det ikke vil fungere med systemer som kjører PSv2. 0 eller tidligere.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.