PowerShell - 在继续之前检查用户是否在组中(Active Directory)

时间:2012-08-17 18:58:04

标签: powershell active-directory

我正在编写一个脚本,在发送请求时自动为用户提供组。我正在检查它是否在列表中的特定组中,或者包含HDS等短语。我目前无法让“包含”命令对我来说非常合适。这是我得到的:

$memberof = get-QADMemberOf -Identity tpatry
if($memberof -contains "HDS" -eq $true){
Write-Host "User is already a member of one of the Job Roles"}

当我运行时:

$memberof = get-QADMemberOf tpatry
Write-Host $memberof

我得到了我所属的这些团体。这是$ memberof返回的内容:

USERS\Domain Users USERS\CCNet-HDS-ADMIN USERS\HDS-CP-STUDENT-ACL USERS\ME-513 USERS\HDS-IT-FTE-ACL USERS\MNE-STUDENTS-O USERS\HDS-ADMIN

当我运行它时,只是给我一个新提示,运行另一个提示输入我的下一个命令。

2 个答案:

答案 0 :(得分:0)

我必须查看 -contains 上的文档。好像我以前见过它,但我总是忽视或忘记那一个。

不知道主要问题是否与 get-QADMemberOf 的回归有关?我没有这个功能可用,检查online看起来它可能会返回一个对象的集合/列表,而不是字符串?如果它不是字符串,您可能需要在测试时迭代集合中的每个项目以查找您要查找的值。

$groups = get-QADMemberOf -identity tpatry
foreach($group in $groups)
{

  # pipe one of them to gm (e.g. $group | gm) to get a list of properties

  if ($group.Name -like "*HDS*" -eq $true) 
  { 
       write-host "found" 
  }
}

如果返回值 IS 是一个字符串,您可以尝试使用-like运算符:

$str = "this is a test"
if ( $str -like "*test*" -eq $true )
{
   write-host "found"
}

我们也可以根据需要使用C#:

$str = "this is a test"
if ($str.Contains("test") -eq $true )
{
    write-host "found"
}

答案 1 :(得分:0)

您可以将Name属性与通配符一起使用,只返回您所追求的组:

$memberOf = Get-QADMemberOf -Identity tpatry -Name *HDS*

if($memberOf)
{
    Write-Host "User is already a member of one of the Job Roles"
}
else
{
    Write-Host "User is not a member of any of the Job Roles"
}