簡體   English   中英

Powershell腳本從一個OU檢索PC成員資格

[英]Powershell script to retrieve PC Membership from one OU

首先,我沒有接受過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列時(例如),即使列在第三列中,它也顯示為結果中的第一列。 在這種情況下,如果我添加了DNSHostName,則希望輸出文件為Group Name,PCName,DNSHostName(或其他一些屬性); 但按此順序。

我做了一些修改,但這應該可以完成工作。

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

有關哈希表的更多信息,請參見關於哈希表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM