0

まず、私は Powershell の正式なトレーニングを受けていないため、ほとんどのコードは適合コードであるか、比較的単純です。マシンの拡張プロパティを取得するとき、または返される列のリストを再編成するときに問題があります。

私の組織では、PC は、私が関与しているローカル OU のメンバー、または私が権利を持たないエンタープライズ OU のいずれかになります。ローカルの OU グループをスキャンしても、探している結果が得られません。このロジックをユーザーとグループのメンバーシップに適用するための答えを見つけることができましたが、PC ではうまくいかないようです。

Import-Module ActiveDirectory
$OU = "OU=Computers,OU={ORG UNIT}"
$Path = "C:\{FILE LOC}\AD-groupPClist_$(get-date -f yyyyMMdd_HHmm).csv"

$PC = ForEach ($P in (Get-ADComputer -Filter * -SearchBase $OU))
{
$Machine = Get-ADComputer $P -Properties MemberOf
$Groups = ForEach ($Group in ($Machine.MemberOf))
{
    (Get-ADGroup $Group).Name
}
$Groups = $Groups | Sort
ForEach ($Group in $Groups)
{
    New-Object PSObject -Property @{
    Group = $Group
    PCName= $Machine.Name
    }
}
}
$PC | Export-CSV $Path -NoTypeInformation

たとえば、DNSHostName 列を追加しようとすると、3 番目にリストされていても、結果の最初の列として表示されます。この場合、DNSHostName を追加した場合、出力ファイルを Group Name、PCName、DNSHostName (またはその他の属性) にする必要があります。しかし、その順序で。

4

1 に答える 1

1

いくつかの変更を加えましたが、これでうまくいくはずです。

Import-Module ActiveDirectory
$OU = "OU=Computers,OU={ORG UNIT}"
$Path = "C:\{FILE LOC}\AD-groupPClist_$(get-date -f yyyyMMdd_HHmm).csv"

$PC = ForEach ($P in (Get-ADComputer -Filter * -SearchBase $OU -Properties MemberOf)) {
    Foreach ($Group in $P.MemberOf) {
        [PSCustomObject]@{
            Group = (Get-ADGroup $Group).Name
            PCName = $P.Name
            DNSHostName = $P.DNSHostName
        }
    }
}
$PC | Sort-Object Group | Export-Csv $Path -NoTypeInformation

プロパティまたは CSV ヘッダーの順序に関して、@{}ハッシュ テーブルを使用していることを PowerShell に指示します。ハッシュ テーブルのデフォルトの動作は順不同です。この動作を回避するには、 [ordered]属性を使用してハッシュ テーブルを作成するか[pscustomobject]、オブジェクトの作成時に型アクセラレータを使用する必要があります。New-Objectコマンドだけでは、ハッシュ テーブルの順序付けされていない性質の影響を受けません。[PSCustomObject]の方が高速で、順序の問題がないため、カスタム オブジェクトを優先して使用することをお勧めしますNew-Object

New-Objectハッシュ テーブルを使用した動作例については、以下を参照してください。

# Unordered output example

New-Object -TypeName psobject -Property `
     @{
       property3 = 'value3'
       property2 = 'value2'
       property1 = 'value1'
     }

property1 property2 property3
--------- --------- ---------
value1    value2    value3

# Example enforcing order

New-Object -TypeName psobject -Property `
     ([ordered]@{
       property3 = 'value3'
       property2 = 'value2'
       property1 = 'value1'
     })

property3 property2 property1
--------- --------- ---------
value3    value2    value1

ハッシュ テーブルの詳細については、ハッシュ テーブルについてを参照してください。

于 2019-06-18T12:49:57.983 に答える