1

リクエストが送信されたときにグループ内のユーザーを自動的にプロビジョニングするスクリプトを書いています。リストから特定のグループに含まれているかどうか、またはHDSなどのフレーズが含まれているかどうかを確認するためのチェックを実行しています。現在、「contains」コマンドを正しく機能させることができません。これが私が得たものです:

$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

ワイルドカードを指定して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 に答える
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 に答える