2017-09-19 42 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