搜索 Active Directory 并将多个组中的名称列表导出到 powershell 的 txt 文件
Searching Active Directory and exporting a list of names in mulitpule groups to a txt file for powershell
我正在尝试创建一个简单的 PowerShell 脚本,该脚本将从文本文件中查看 Active Directory 组列表,然后在 Active Directory 中搜索组(无论类型如何),然后获取每个组中的成员列表的组,然后将每个用户的 "name" 属性输出到输出文本文件。
现在我几乎完成了除了最后一部分之外的所有事情。当它将名称输出到文本文件时,它只向文件输出一个名称,而不是其他 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;
};
};
};
例如,输出始终如下所示:
姓名
姓 Name1
什么时候应该是:
姓名
姓 Name1
姓 Name2
姓 Name3
姓 Name4
姓 Name5
等等,等等,等等
为组中的每个用户调用此行,每次运行时都会覆盖文件的内容。
$displayname=get-aduser -identity $User.SamAccountName | select name | Out-File -filepath $Fullpath;
如果将 Out-File
替换为 Add-Content
,则该命令将追加到文件中。如果您重复运行 脚本,请务必先使用Set-Content
清除文件。您也不需要在此步骤中设置变量 $displayname
的值:
Set-Content -Value "" -Path $Fullpath
get-aduser -identity $User.SamAccountName | select name | Add-Content -Path $Fullpath;
我正在尝试创建一个简单的 PowerShell 脚本,该脚本将从文本文件中查看 Active Directory 组列表,然后在 Active Directory 中搜索组(无论类型如何),然后获取每个组中的成员列表的组,然后将每个用户的 "name" 属性输出到输出文本文件。 现在我几乎完成了除了最后一部分之外的所有事情。当它将名称输出到文本文件时,它只向文件输出一个名称,而不是其他 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;
};
};
};
例如,输出始终如下所示:
姓名
姓 Name1
什么时候应该是:
姓名
姓 Name1
姓 Name2
姓 Name3
姓 Name4
姓 Name5
等等,等等,等等
为组中的每个用户调用此行,每次运行时都会覆盖文件的内容。
$displayname=get-aduser -identity $User.SamAccountName | select name | Out-File -filepath $Fullpath;
如果将 Out-File
替换为 Add-Content
,则该命令将追加到文件中。如果您重复运行 脚本,请务必先使用Set-Content
清除文件。您也不需要在此步骤中设置变量 $displayname
的值:
Set-Content -Value "" -Path $Fullpath
get-aduser -identity $User.SamAccountName | select name | Add-Content -Path $Fullpath;