POWERSHELL - 使用具有Foreach外观的数组,查看OU中的用户 -

时间:2015-04-02 00:05:20

标签: arrays loops powershell foreach

基本上我想找到不活跃的用户,所以我在搜索库中使用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 $90days) -AND (passwordlastset -le $90days) -AND (enabled -eq $True)} -Properties lastlogondate, passwordlastset | Select-Object name, lastlogondate, passwordlastset, samaccountname))
{

....

并收到错误....

  

行:18 char:22   + $ OU | ForEach($ user in(Get-ADUser -SearchBase $ _ -filter {(lastlogondate -notl ...   + ~~意外的令牌' in'在表达或陈述中。在行:18 char:21   + $ OU | ForEach($ user in(Get-ADUser -SearchBase $ _ -filter {(lastlogondate -notl ...   +〜缺少关闭')'在表达中。在行:18 char:293   + ... samaccountname))   +〜意外的令牌')'在表达或陈述中。       + CategoryInfo:ParserError:(:) [],ParentContainsErrorRecordException       + FullyQualifiedErrorId:UnexpectedToken

这很好用

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


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

1 个答案:

答案 0 :(得分:1)

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

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