Powershell 获取AdUser无选择变量

Powershell 获取AdUser无选择变量,powershell,Powershell,我正试图找出所有关于我的域管理员的信息 #set domains we are going to query $domains = 'mydomainname.com' #首先,我带来了山姆账户的名字 Foreach ($domain in $domains) { $OUTPUT =Get-AdGroupMember -identity “Domain Admins” -recursive -server $domain |

我正试图找出所有关于我的域管理员的信息

#set domains we are going to query  
$domains = 'mydomainname.com'
#首先,我带来了山姆账户的名字

    Foreach ($domain in $domains)
    {
        $OUTPUT =Get-AdGroupMember  -identity “Domain Admins” -recursive -server  $domain  |
                 Select-Object -Property samAccountName|
                 Select samAccountName;

        $Outputs +=$OUTPUT;
        $OUTPUT |Export-CSV "C:\File\$($domain).csv" -NoTypeInformation ;

    }
    $OUTPUT #this print the sam accounts 


   

#here is the problem 

    Foreach ($user in $OUTPUT)
   { 
        $Users2 =Get-ADUser -Filter "SamAccountName -like '$OUTPUT'" -Properties *  
        $USER3 +=$Users2;
        $Users2 |Export-CSV "C:\File\$($domain)Userpop.csv" -NoTypeInformation ;
    }

我认为这是你的过滤器的问题。尝试按如下方式更改该行:

Get-ADUser -Filter " SamAccountName -like `"$($user.samaccountname)`" " -Properties *
它不能是
$OUTPUT
,因为这是一个数组。循环变量是
$user
,它是一个对象,因此需要
.samaccountname
属性。过滤器需要一个字符串,其
-like
与带引号的字符串相匹配,因此需要``将引号传递给最后一个字符串

您的
$user2
的CSV输出可能不是您所期望的,因为每个对象都输出到同一个文件中。您的意思可能是有一个
-附加
或将它们写入不同的文件


您可能还需要重置
$user3
。可能需要在该循环之前添加
$user3=@()

我认为这是您的筛选器存在问题。请尝试按如下方式更改该行:

Get-ADUser -Filter " SamAccountName -like `"$($user.samaccountname)`" " -Properties *
它不能是
$OUTPUT
,因为这是一个数组。您的循环变量是
$user
,这是一个对象,因此您需要
.samaccountname
属性。筛选器需要一个与带引号的字符串相匹配的
-like
,因此您需要`将引号传递到最终字符串

您的
$user2
的CSV输出可能不是您所期望的,因为每个对象都输出到同一个文件中。也许你的意思是要有一个
-附加
,或者将它们写入不同的文件


您可能还需要重置
$user3
。可能在循环之前添加
$user3=@()

您应该始终避免向带有
$array+=$something
的数组中添加内容,因为这意味着整个数组将在内存中重建,这将耗费时间和资源

另外,我建议使用更具描述性的变量名,这样代码在一段时间后仍然可以理解

然后,因为您从不同的域获取信息,所以在第一个循环中将域名与samaccount名称一起存储是很重要的,这样您就可以将它们用作
-Server
上第二个循环的
Get ADUser
参数

试一试


您应该始终避免向带有
$array+=$something
的数组中添加,因为这意味着整个数组将在内存中重建,这将耗费时间和资源

另外,我建议使用更具描述性的变量名,这样代码在一段时间后仍然可以理解

然后,因为您从不同的域获取信息,所以在第一个循环中将域名与samaccount名称一起存储是很重要的,这样您就可以将它们用作
-Server
上第二个循环的
Get ADUser
参数

试一试


所以你的问题是什么?有什么问题?错误在哪里?什么东西没有按预期工作。。。细节。。。嗨,欢迎Mariano。我在这里看到了一个非常好的尝试,但仍然需要在一些基础上做一些工作。在这里查看您的数据是如何流动的。在第一个ForEach循环中,将数据分配给变量$OUTPUT。每次循环运行$OUTPUT时,都会被新数据覆盖。看起来您试图通过捕获$Outputs来解决这个问题,这很好,但仍然存在一些问题。稍后,您将有另一个foreach循环,它尝试使用$OUTPUT而不是$Outputs$输出将仅包含上次循环运行的数据。Powershell很有趣,不是吗?坚持下去!我们没有收到你的来信。。给出的答案解决了你的问题吗?如果是,请点击大的复选图标“代码>✓在左边。这将帮助其他有类似问题的人更容易找到它。所以。。。你的问题是什么?有什么问题?错误在哪里?什么东西没有按预期工作。。。细节。。。嗨,欢迎Mariano。我在这里看到了一个非常好的尝试,但仍然需要在一些基础上做一些工作。在这里查看您的数据是如何流动的。在第一个ForEach循环中,将数据分配给变量$OUTPUT。每次循环运行$OUTPUT时,都会被新数据覆盖。看起来您试图通过捕获$Outputs来解决这个问题,这很好,但仍然存在一些问题。稍后,您将有另一个foreach循环,它尝试使用$OUTPUT而不是$Outputs$输出将仅包含上次循环运行的数据。Powershell很有趣,不是吗?坚持下去!我们没有收到你的来信。。给出的答案解决了你的问题吗?如果是,请点击大的复选图标“代码>✓在左边。这将帮助其他有类似问题的人更容易地找到它。