2017-09-19 41 views
0

我負責創建可執行以下任務的腳本。例如:我們有一個域名ABC。powershell - 檢查多個用戶並排除重複的用戶並添加計數

有4個安全組,命名爲A,B,C和D.

Peter是A的成員和B組。 David是B和C組的成員。 約翰是A組的成員。 B組也是A組的一員。

我們希望找到A,B組中的用戶總數。那些已經在組中的用戶將排除計數,即排除重複用戶數。根據以上所述,腳本將顯示總計數A & B = 3個用戶,而不是5個用戶。我試圖編寫一個腳本來計算A和B組中的用戶,還有A和B組中存在任何組。如果約翰居住在A和B,劇本將增加1個計數。另外,如果David在B組但不在A組中,它將增加1個計數。

編輯:修改代碼後,你們的幫助下,沒有任何錯誤。但是顯示的結果是空的。

$groups = $A_group, $B_Group 
$gm  = @() 
foreach ($group in $groups) { 
    $gm += Get-ADGroupMember $group | 
      where {$_.objectclass -eq 'user'} | 
      select SamAccountName 
} 
($gm.samaccountname | Select -Unique).Count 
Write-Output $total = ($gm.samaccountname | Select -Unique).Count 
+1

你在哪裏定義你的$ total變量? – guiwhatsthat

+0

*確實*代碼「不工作」?預期的結果是什麼?實際結果是什麼?你有錯誤嗎?他們說了什麼? –

+0

'$ total =($ gm.samaccountname | Select -Unique).Count;寫輸出$ total' –

回答

0

因爲有嵌套組[中組組],你唯一缺少的是Get-ADGroupMember-recursive參數。這將獲得嵌套ADGroup B中的用戶,而不僅僅是返回ADGroup B名稱。

將此行更改爲如下:

$gm += Get-ADGroupMember $group -Recursive | where objectclass -eq 'user' | select SamAccountName 

我不知道最後一行是做[好像不對和不必要]下面行是足以讓你的總數。

$total = ($gm.samaccountname | Select -Unique).count 
+0

運行代碼時出現錯誤。 char:17 +其中<<<< objectclass -eq'user'| + CategoryInfo:InvalidArgument:(:) [位置對象],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand 位置對象:無法綁定參數 'FilterScript'。無法將類型爲「System.String」 的「objectclass」值轉換爲鍵入「System.Management.Automation.ScriptBlock」。 – Power988

+0

在ps1:28 char:17 +其中<<<< objectclass -eq'user'| + CategoryInfo:InvalidArgument:(:) [Where-Object],ParameterBindingException + FullyQualifiedErrorId:CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.WhereObjectCommand – Power988

+0

不確定爲什麼沒有回覆需要使用註釋? – Power988