0

テキスト ファイルから Active Directory グループのリストを参照し、Active Directory でグループを検索し (タイプに関係なく)、各グループのメンバーのリストを取得する単純な PowerShell スクリプトを作成しようとしています。次に、各ユーザーの「名前」属性を出力テキスト ファイルに出力します。これで、最後の部分を除いてほとんどすべての作業が完了しました。名前をテキスト ファイルに出力すると、1 つの名前だけがファイルに出力され、他の 300 の名前は出力されません。ただし、出力関数を外すと、スクリプトはすべての名前をコンソールに出力したいだけです。これを行う私の方法が機能しない理由を誰かが説明できますか? 出力を思い通りにファイルに送信できない理由について、私は本当に興味があります。さらに、スクリプトはすべてを正しくループし、グループも見つけることがわかっています (テキスト ファイルを見ると、ファイルごとに 1 つのエントリが表示されるため、これはわかっています) が、スクリプトは最初の 8 つのグループを通過し、エラーをスローし始めます。ループするはずの特定のグループが見つからないと述べています。しかし、すでにそれらを見つけており、各ファイルに 1 つのエントリしか出力していません。どうしてこれなの?

最初の質問に対する回答にもっと興味があります。なぜなら、スクリプトは本来の動作を正しく実行するからです。

繰り返しになりますが、スクリプトが各グループに対して 300 以上の名前を出力する必要があるのに、なぜスクリプトがファイルに 1 つの名前しか出力しないのかを知りたいと思います。

      ##This is variable that will hold the file path for the list of Active Directory Groups##

 $file='C:\Users\me\Desktop\DL_Names.txt';

 ##Command to dump the list into a variable##

 $DLnames=get-content $file;

 ##This is the variable to hold the path for where the output files are to be placed##

 [string]$path='C:\Users\me\Desktop\DL_repository\';

 ##Loop through the variable and for each entry preform the instruction listed##

 foreach ($name in $DLnames)
 {

 ##These two variables are used to create the file name for the output files##

 [string]$filename=$name+'.txt';

  [string]$Fullpath=$path+$filename;

 #This variable is used to determine if the groups exists in Active Directory##

 $verifygroupexists = Get-ADGroup -Identity $name;

 ##This is the if statement that is used to determine if the group exists in Active Directory##

 if($verifygroupexists -eq $null)

 {

 ##If the group doesnt exist, create a file and output the string to the file stating so with the group name##

 ##Still working on the removing portion of this, need help##

 New-Item $fullpath -ItemType file;

 [string]$error='AD Group'+' '+$name+' '+'does not exist';

 $error | Out-File -filepath $Fullpath;

 $Removeentry=$name;

 $name.Remove($Removeentry);

 }  

 else

 {

 ##If the group does exist in Active Directory then create a new text file to be used for output.

 New-Item $fullpath -ItemType file;

       ##Get the list of memebrs in the group and place them into a new variable##

 $groupmember=get-adgroupmember -Identity $name;

              ##Now loop through each entry in the new variable and output to the text file each member's 'name' (A.K.A. Displayname)##

 foreach ($user in $groupmember)

 {


              ##This is where my issue is, its not outputting all of the names to the text file##

             $displayname=get-aduser -identity $User.SamAccountName | select name | Out-File -filepath $Fullpath; 


              };



         };


 }; 

例として、出力は常に次のようになります。

名前

ラスト、お名前1

それがいつあるべきか:

名前

ラスト、お名前1

ラスト、ネーム2

お名前3

お名前4

ラスト、お名前5

などなど

4

1 に答える 1