Я пытаюсь создать простой сценарий PowerShell, который будет просматривать список групп Active Directory из текстового файла, затем искать в Active Directory группы (независимо от типа), затем получать список участников в каждой из групп и затем выведите их атрибут «имя» каждого пользователя в выходной текстовый файл. Сейчас я почти все сделал, кроме последней части. Когда он выводит имя в текстовый файл, он выводит только ОДНО имя в файл, а не остальные 300. Однако, если я снимаю функцию вывода, скрипт выводит все имена, как я хочу, только в консоль. Может кто-нибудь объяснить, почему мой метод сделать это не работает? Мне действительно любопытно, почему я не могу направить вывод в файл так, как хочу. Кроме того, сценарий проходит через все правильно, и я знаю, что он также находит группы (я знаю это, потому что, когда я смотрю на текстовые файлы, я вижу одну запись для каждого файла), но сценарий проходит через первые 8 групп и начинает выдает ошибки, говорящие о том, что он не может найти определенные группы, которые он должен пройти по циклу. Но он их уже находил и выдавал только по одной записи в каждый из файлов. Почему это?
Меня больше интересует ответ на мой первый вопрос, потому что скрипт по-прежнему делает то, что должен делать правильно.
Итак, чтобы повторить, я хотел бы знать, почему скрипт выводит только одно имя в файл, когда он должен выводить 300+ для каждой группы.
##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
и т.д, и т.д, и т.д.
out-file
, а не по одной строке за раз. Или используйтеadd-content
, чтобы избежать перезаписи. - person TessellatingHeckler   schedule 28.03.2018$things | foreach-object { ... } | out-file
направляет все объекты в один файл вместо$things | foreach-object { ...| out-file }
, который направляет каждый объект в новый файл (перезаписывая предыдущий файл). - person TessellatingHeckler   schedule 28.03.2018