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