POWERSHELL - 使用带有 Foreach 循环的数组,查看 OU 中的用户 -

POWERSHELL - Using an array with a Foreach loop, looking at users in an OU -

基本上我想找到不活跃的用户,所以我在搜索库中使用 foreach 循环,

现在我正在尝试在开始时在数组中查看多个 OU。

这就是我正在尝试的...

$OU=@("OU Path 1",
        "OU Path 2",
        "OU Path 3")

$OU | ForEach ($user in (Get-ADUser -SearchBase $_ -filter {(lastlogondate -notlike "*" -OR lastlogondate -le days) -AND (passwordlastset -le days) -AND (enabled -eq $True)} -Properties lastlogondate, passwordlastset | Select-Object name, lastlogondate, passwordlastset, samaccountname))
{

....

并收到错误....

At line:18 char:22 + $OU | ForEach ($user in (Get-ADUser -SearchBase $_ -filter {(lastlogondate -notl ... + ~~ Unexpected token 'in' in expression or statement. At line:18 char:21 + $OU | ForEach ($user in (Get-ADUser -SearchBase $_ -filter {(lastlogondate -notl ... + ~ Missing closing ')' in expression. At line:18 char:293 + ... samaccountname)) + ~ Unexpected token ')' in expression or statement. + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId : UnexpectedToken

这很好用

$SearchBase1 = "OU1"
$SearchBase2 = "OU2"
$SearchBase3 = "OU3"


ForEach ($user in(Get-ADUser -SearchBase $SearchBase1 -filter {(lastlogondate -notlike "*" -OR lastlogondate -le days) -AND (passwordlastset -le days) -AND (enabled -eq $True)} -Properties lastlogondate, passwordlastset | Select-Object name, lastlogondate, passwordlastset, samaccountname))
{

问题是您试图创建一个嵌套的 ForEach 循环,而忘记了循环的第一部分。在这里,您希望将 $OU 传递到 ForEach 循环中,并在该 ForEach 循环中创建另一个基于第一个 ForEach 循环的当前对象的循环。

$OU | ForEach{
    ForEach ($user in (Get-ADUser -SearchBase $_ -filter {(lastlogondate -notlike "*" -OR lastlogondate -le days) -AND (passwordlastset -le days) -AND (enabled -eq $True)} -Properties lastlogondate, passwordlastset | Select-Object name, lastlogondate, passwordlastset, samaccountname))
    {
        <Do Stuff>
    } #End inner ForEach Loop for current OU
}