【问题标题】:Running PowerShell Command Directly On CMD Gives Index Was Out Of Range Error直接在 CMD 上运行 PowerShell 命令会导致索引超出范围错误
【发布时间】:2021-07-05 12:53:43
【问题描述】:

以下命令旨在列出过期的用户帐户:

powershell -c "Get-LocalUser | Where-Object { $_.AccountExpires -le (Get-Date) -and $null -ne $_.AccountExpires } | Select-Object Name, AccountExpires"

直接在 PowerShell 上运行似乎运行良好,但是,当我通过 CMD 运行相同的命令时,它会给出以下错误:

Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index').

我认为这个问题与 $null 参数有关,但我需要它来从输出中排除空白匹配项。有谁知道解决此错误的方法?还是不匹配空白输出的替代方法?

【问题讨论】:

    标签: windows powershell command


    【解决方案1】:

    在使用操作符时你应该说清楚:

    powershell -c "Get-LocalUser | Where-Object { ($_.AccountExpires -le (Get-Date)) -and ($null -ne $_.AccountExpires) } | Select-Object Name, AccountExpires"
    

    这对我来说很好用

    【讨论】:

    • 谢谢,我似乎遇到了同样的错误。每当我删除 $null 位时,它都可以正常工作。我们有没有机会对 $null 进行类似的检查?
    【解决方案2】:

    可能不是 $null,请尝试使用空字符串:

    ("" -ne $_.AccountExpires)

    【讨论】:

    • 谢谢 Alex,我已经尝试过该选项,但是 PowerShell 似乎并不尊重它,并且仍然输出包含帐户过期列中空格的行。
    • AccountExpires 的属性进行了一些研究。这是一个System.Nullable[datetime],所以继续尝试作为操作员:$_.AccountExpires -ne [nullable[datetime]]$null
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多