Maybaygiare.org

Blog Network

Nový-Objekt PSObject vs. PSCustomObject

Tam je často některé nejasnosti v souvislosti s rozdíly mezi pomocí New-Object PSObject a PSCustomObject, stejně jako, jak fungují.

buď přístup může být použit k převzetí sady hodnot ze sbírky objektů PowerShell a jejich seskupení do jediného výstupu. Stejně tak obě cesty budou výstup dat jako NoteProperties v systému.Řízení.Automatizace.Typy objektů PSCustomObject. Tak co je mezi nimi?

pro začátek byla rutina New-Object zavedena v PowerShell v1.0 a prošel řadou změn, zatímco použití třídy PSCustomObject přišlo později v v3. 0. Pro systémy používající PowerShell v2. 0 nebo starší musí být použit nový objekt. Klíčový rozdíl mezi verzí 2.0 a verzí 1.0 z administrativního hlediska je, že 2.0 umožňuje použití hash tabulek. Například:

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

S Novou-Objekt metoda v prostředí PowerShell v1.0, musíte deklarovat typ objektu, který chcete vytvořit a přidat členy do kolekce v jednotlivých příkazů. To se však změnilo v v2.0 s možností využití hashtables:

Nový-Objekt v 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
}

Tady je ten výstup:

Poznámka snad i získáme stejný výsledek výstup vs. pořadí v tabulce hash

Tím zachránil mnoho režie při psaní a za předpokladu, čistší vypadající scénář. Obě metody však mají stejný problém v tom, že výstup nemusí být nutně ve stejném pořadí, v jakém je uveden, takže pokud hledáte konkrétní formát, nemusí to fungovat. PSCustomObject to opravil, když byl představen v v3. 0, spolu s poskytováním většího zefektivnění vašich skriptů.

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

Poznámka příkaz vlastnosti

Jak se ukázalo, váš objem výroby bude vždy odpovídat tomu, co jste definovali ve vašem hashtable. Další výhodou použití PSCustomObject je to, že bylo zaznamenáno, že výčet dat je rychlejší než jeho protějšek nového objektu. Jediná věc, kterou je třeba mít na paměti s PSCustomObject, je, že nebude fungovat se systémy se systémem PSv2.0 nebo staršími.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.