テキスト ファイルから 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
などなど