我試圖從一個特定的OU中讀取計算機的組成員資格,并寫入一個CSV檔案。組成員的輸入標準是,如果計算機是"admin"的一部分,我需要以下格式的csv檔案
。---------------------------------------------------------
計算機 Group1 Group2 Group3 Group4
ABCD admin1 admin2 admin3 admin4
EFGH admin2 admin3
XYZZ admin1 admin4
--------------------------------------------------------------
但最后是這樣的。
---------------------------------------------------------
電腦組1組2組3組4
ABCD admin1 admin2 admin3 admin4
EFGH admin2 admin3
XYZZ admin1 admin4
--------------------------------------------------------------
代碼是這樣的
$All_computer=Get-ADComputer -Filter * -Property * - - SearchBase $ou -Server $server | Select-object Name, DNSHostName,Description,memberof
$computerExport = $All_computer !
ForEach-Object {
$ComputerName = $_.Name
$Description = $_.description
$DNSHostname = $_.DNSHostName
$memberof = $_.memberof
$groups = $memberof.where{$_ -like "*$unput_group*"/span>}。
$Group_member = [pscustomobject]@{
作業站 = $ComputerName$Description[/span
DNS_Hostname = $DNSHostname$i = 0 }
foreach($group in $Groups)
{
$i
$member = $group. split('=')[1].split(',')[0]
$Group_member | add-member -MemberType NoteProperty -Name "Group$i"/span> -Value $member
}
$Group_member }
}
}
$computerExport | export-csv . Membership_status.csv -NoTypeInformation
我需要做什么來使組成員資格填充到適當的欄目中。
uj5u.com熱心網友回復:
當然,它是如此。 我的意思是它正在做你要求它做的事情。 你只是將屬性的數量添加到從where物件查詢中發現的自定義物件中。 我真的很難理解你為什么要這樣做,但我認為你真正想要的是讓每個物件擁有所有可能的屬性,但對于那些不符合特定計算機的屬性要有空值,或者最好使用布林值。
所以......也許像這樣:
[string]$GroupSearch = "admin"
$All_computer = Get-ADComputer -Filter * -Property DNSHostName, Description, 成員之一 -搜索基地 $ou -服務器 $server | Select-Object Name, DNSHostName, Description, memberof
$MatchedGroups = $All_Computer.MemberOf | Sort -Unique | ? {$_.Name -match $GroupSearch}。
$computerExport = ForEach ($C in $All_computer)。{
$Group_member = [pscustomobject] @{
Workstation = $($C.Name)
Comp_Description = $($C.Description)
DNS_Hostname = $($C.DNSHostName)
}
ForEach ($group in $MatchedGroups) {
[string]$GrpName = $($group. split('=')[1].split(',')[0]
If ($C.MemberOf -包含$group) {
$Group_member | Add-Member -MemberType NoteProperty -Name $GrpName -Value $true !
} else {
$Group_member | Add-Member -MemberType NoteProperty -Name $GrpName -Value $false !
}
}
$Group_member }
}
$computerExport | Export-Csv 。 Membership_status.csv -NoTypeInformation
uj5u.com熱心網友回復:
如果我理解這個問題,你需要從某個OU中獲得所有屬于具有類似部分名稱的組的計算機。 要做到這一點,我建議首先創建一個計算機物件的陣列,其中有一個臨時的額外屬性 "組",其中存盤了與部分名稱相匹配的組名稱。
稍后,我們將把這些放在正確的順序中,作為名為'Group1'、'Group2'等的新屬性。
# the partial groupname to search for。
$unput_group = 'admin'/span>
# Get-ADComputer默認已經回傳這些屬性:
# DistinguishedName, DNSHostName, Enabled, Name, ObjectClass, ObjectGUID, SamAccountName, SID, UserPrincipalName
# get an array of computer objects that are member of 'admin*' group(s) with the desired properties.
# 添加一個額外的臨時屬性,其中包含一個'admin*'組名稱陣列。
$All_computer = Get-ADComputer -Filter * -Property Description, MemberOf -SearchBase $ou -Server $server|
Where-Object { $_.MemberOf -match $unput_group } |
Select-Object @{Name = 'Workstation'; Expression = {$_.Name},
@{Name = 'Comp_Description'; Expression = {$_.Description}},
@{Name = 'DNS_Hostname'; Expression = {$_.DNSHostName},
@{Name = 'Groups'; Expression = {($_.MemberOf |?
Where-Object { $_ -match "CN=($unput_group[^, ] )" } |
ForEach-Object { $matches[1] }) }}
# 從我們收集的計算機中獲取所有的組名,并對其進行唯一性排序。
$All_Groups = $All_computer.Group | Sort-Object -Unique
# 建立一個帶有屬性名稱('Group1', 'Group2'等)的查找哈希表。
$hash = [ordered]@{}。
for ($i = 1; $i -le $All_Groups. Count; $i ) {
$hash["Group$i"] = $All_Groups[$i - 1]
}
# now loop through the collection and add the group properties in order
$result = foreach ($computer in $All_computer) {
foreach ($propertyName in $hash.Keys) {
$group = if ($computer. Groups -包含$hash[$propertyName]) { $hash[$propertyName] }
$computer | Add-Member -MemberType NoteProperty -Name $propertyName -Value $group] }
}
# 輸出更新的物件并洗掉臨時的'Groups'屬性。
$computer | Select-Object * -ExcludeProperty Groups
}
# 最后,將結果保存到磁盤上。
$result | Export-Csv -Path . Membership_status.csv -NoTypeInformation
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/326692.html
標籤:
