我在高潮和低潮中搜索,没有运气。
对数组使用foreach,对每个数组项运行命令后,我不确定结果来自哪个数组项。
我尝试了许多变化。这段代码是我尝试过的最好的例子。
$ADGroupVar = @(
'ADGroup1'
'ADGroup2'
'ADGroup3'
);
foreach ($ADgrouplist in $ADGroupVar)
{
Write-Host $ADgrouplist
Get-ADGroupMember ($ADgrouplist) | select name
}
ADGroup1
ADGroup2
ADGroup3
Computer5
Computer10
Computer2
Computer4
Computer20
Computer3
Computer1
期望的结果是:
ADGroup1
电脑5
电脑10
ADGroup2
Computer2
电脑4
电脑20
ADGroup3
Computer3
Computer1
或
Computer5 ADGroup1
Computer10 ADGroup1
...
答案 0 :(得分:3)
使用Write-Host
停止。您不能依靠其输出,尤其是在与stdout混合时。此示例应举例说明您要完成的任务:
$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
foreach ($group in $adGroupList)
{
$group
(Get-ADGroupMember $group).Name
}
答案 1 :(得分:2)
您真的不想要您想要的东西。一系列字符串,一些组名和一些成员名(其中组名后面的名称是成员)是一个非常脆弱的系统。
如何区分组名和成员名?如果更改顺序(例如通过排序),则组成员身份将丢失。以后将很难以这种方式处理数据。
您可以考虑改用 hashtable
:
$ ADGroupVar = @(
“ ADGroup1”
“ ADGroup2”
“ ADGroup3”
);
$ results = @ {}
foreach($ ADGroupVar中的$ ADgroup)
{
$ results [$ ADgroup] = Get-ADGroupMember $ ADgroup |选择名字
}
写输出$结果
这会将每个组名与用户名列表相关联。使用下标运算符 []
访问它们,例如:
$ results ['ADGroup2']
计算机2
电脑4
电脑20
整个哈希表的内容以这种方式显示:
$ results
名称值
---- -----
ADGroup2 {计算机2,计算机4,计算机20}
ADGroup3 {计算机3,计算机1}
ADGroup1 {计算机5,计算机10}
答案 2 :(得分:0)
要获得其他“期望的结果”
Computer5 ADGroup1
Computer10 ADGroup1
您可以使用:
'ADGroup1', 'ADGroup2', 'ADGroup3' | ForEach-Object {
$GroupName = $_
Get-ADGroupMember $_ | ForEach-Object {
"$($_.Name) $GroupName"
}
}
或
$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
$adGroupList | ForEach-Object {
$GroupName = $_
Get-ADGroupMember $_ | ForEach-Object {
"$($_.Name) $GroupName"
}
}
或
$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
foreach ($adGroup in $adGroupList) {
Get-ADGroupMember $adGroup | ForEach-Object {
"$($_.Name) $adGroup"
}
}
或
$adGroupList = 'ADGroup1', 'ADGroup2', 'ADGroup3'
foreach ($adGroup in $adGroupList) {
$adGroupMembers = (Get-ADGroupMember $adGroup).Name
foreach ($adGroupMember in $adGroupMembers) {
"$adGroupMember $adGroup"
}
}