często występują pewne nieporozumienia dotyczące różnic pomiędzy używaniem nowego obiektu PSObject a PSCustomObject, a także sposobu działania tych dwóch obiektów.
oba podejścia mogą być użyte do pobrania zestawu wartości z kolekcji obiektów PowerShell i zestawiania ich w jedno wyjście. Ponadto obie metody będą generować dane w postaci notatek w systemie.Zarządzanie.Automatyzacja.Typy obiektów PSCustomObject. Więc o co im chodzi?
na początek, nowy-Object cmdlet został wprowadzony w PowerShell v1.0 i przeszedł szereg zmian, podczas gdy użycie klasy PSCustomObject pojawiło się później w wersji 3.0. Dla Systemów używających PowerShell v2. 0 lub wcześniejszych, należy użyć New-Object. Kluczową różnicą między wersją 2.0 A wersją 1.0 z administracyjnego punktu widzenia jest to, że 2.0 umożliwia korzystanie z tabel hashowych. Na przykład:
$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}
przy pomocy metody New-Object w PowerShell v1.0 należy w poszczególnych poleceniach zadeklarować typ obiektu, który chcemy utworzyć i dodać do kolekcji elementy. Zmieniło się to jednak w wersji v2.0 z możliwością używania hashtabli:
New-Object w 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}
oto wyjście: