1

我正在编写一个脚本,该脚本会在发送请求时自动按组提供用户。我正在检查它是否在列表中的特定组中或包含诸如 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

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

4

2 回答 2

0

我将不得不查找有关-contains的文档。好像我以前见过它,但我总是忽略或忘记那个。

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

$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" 
  }
}

如果返回值一个字符串,你可以试试 -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"
}
于 2012-08-17T19:55:27.910 回答
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"
}
于 2012-08-18T09:23:07.487 回答