【问题标题】:How to use And Or Filters in powershell where-object如何在 powershell where-object 中使用 And Or 过滤器
【发布时间】:2019-08-01 05:47:14
【问题描述】:

我正在尝试获取 AD 用户对象的属性列表。除了应用“where-object”过滤器外,大多数脚本都有效。我想让所有满足以下条件的用户:LastLogonDate 超过 75 天前(这有效),启用(有效)和以下任一 - 帐户将来到期或永不过期。 $when 定义正确。

我尝试了许多选项,但通常没有输出或输出中的一个或另一个。

| Where-Object{($_.lastlogondate -le $When -AND $_.enabled -eq $True) -AND Where-Object($_.AccountExpirationDate -gt (Get-Date) -OR $_.AccountExpirationDate -eq 0)} |

我应该会看到过期日期在未来的帐户和未过期的帐户,但我遇到了“This AND this AND (this OR this)”的问题

【问题讨论】:

  • 你不能像这样链接Where-Object。 [grin] 您需要在 one W-O 阶段使用一组复合标准。
  • 另外,像这样在管道中调用 Get-Date 会减慢速度 - 每个项目都会调用一次。 [grin] 在您进入管道之前计算该值。

标签: powershell


【解决方案1】:

代码中额外的Where-Object 应该会引发错误...

    Where-Object {
            $_.lastlogondate -le $When -AND 
            $_.enabled -eq $True -AND 
            ($_.AccountExpirationDate -gt (Get-Date) -OR $_.AccountExpirationDate -eq 0)
    }

如果您的输入正确,这应该可以工作。

【讨论】:

  • 这是我最初使用的,但它不会返回设置为永不过期的帐户。这将返回 -enabled = true、-lastlogondate 为空白(由于某种原因我不明白,因为我没有指定),以及未来的帐户到期日期。
  • 我最终使用$null 得到了我所需要的,我认为我以前使用过的。这是有效的:Where-Object {$_.enabled -eq $True -AND $_.lastlogondate -le $When -AND ($_.AccountExpirationDate -gt (Get-Date) -OR $_.AccountExpirationDate -eq $null)}
猜你喜欢
  • 2014-09-01
  • 2021-05-21
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多