New-Object PSObjectとPSCustomObjectの使用の違いや、その2つの仕組みについては、しばしば混乱します。
いずれのアプローチも、PowerShellオブジェクトのコレクションから一連の値を取得し、それらを単一の出力に照合するために使用できます。 同様に、両方の手段は、システム内のNotePropertiesとしてデータを出力します。管理。自動化。PSCustomObjectオブジェクト型。 だから、それらの間の大したことは何ですか?
まず、New-ObjectコマンドレットはPowerShell v1で導入されました。PSCustomObjectクラスの使用はv3.0の後で行われましたが、0といくつかの変更が行われました。 PowerShell v2.0以前を使用するシステムでは、New-Objectを使用する必要があります。 管理上の観点から2.0バージョンと1.0バージョンの主な違いは、2.0ではハッシュテーブルを使用できることです。 PowerShell v1.0のNew-Objectメソッドを使用すると、作成するオブジェクトタイプを宣言し、個々のコマンドでコレクションにメンバーを追加する必要があります。 しかし、これはv2で変更されました。0ハッシュテーブルを使用する機能を持つ:
PS2.0のNew-Object
$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}
ここに出力があります:
$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}
$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}
$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}
これは、入力のオーバーヘッドの多くを保存し、クリーンな探してスクリプトを提供しました。 ただし、両方の方法には、出力が必ずしもリストされている順序と同じではないという点で同じ問題があるため、特定の形式を探している場合は、機能しない可能性があります。 PSCustomObjectは、v3.0で導入されたときにこれを修正し、スクリプトの効率化を強化しました。
PowerShell v3のPSCustomObject。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
$Path = "c:\scripts"$Directory = Get-Acl -Path $PathForEach ($Dir in $Directory.Access){@{Path = $PathOwner = $Directory.OwnerGroup = $Dir.IdentityReferenceAccessType = $Dir.AccessControlTypeRights = $Dir.FileSystemRights}#EndPSCustomObject}#EndForEach
示されているように、あなたの出力は常にあなたのハッシュテーブルで定義したものと一致します。 PSCustomObjectを使用するもう一つの利点は、新しいオブジェクトの対応するものよりも速くデータを列挙することが注目されていることです。 PSCustomObjectで心に留めておくべき唯一のことは、Psv2.0以前を実行しているシステムでは動作しないことです。