【问题标题】:Get-ADUser (sometimes) not returning results) based on how the property value is setGet-ADUser(有时)不返回结果)基于属性值的设置方式
【发布时间】:2021-06-12 21:43:21
【问题描述】:

我最近在 Powershell 中变得足够方便,可以编写一个脚本(带有 GUI),可以快速找到过期的 AD 帐户等并将数据导出到 CSV。

它提示用户输入所寻找的值(例如,名称、LastLoginDate),然后通过拆分字符串(使用逗号)创建一个数组 - 然后将其分配给一个变量并稍后替换回(当 Get- ADUser cmdlet) 被调用。

但是我什么也没得到。

我已经通过手动分配一些属性(以及脚本的结尾)来隔离问题并且一切正常。

$manualProps = "Name, Enabled"
$manualpropsAsArray = $manualProps -split ',\s*'
$exampleAccountStatus = {(($_.Enabled -eq $false -or $_.Enabled -eq $true ) -and ($_.PasswordNeverExpires -eq $false -or $_.PasswordNeverExpires -eq $true)) -and ($_.passwordexpired -eq $false -or $_.passwordexpired -eq $true)}
 
Get-ADUser -SearchBase $OU -filter $filter -Properties $manualpropsAsArray | Where-Object $accountStatus | Select-Object $manualpropsAsArray | Sort-Object $properySortBy @sortOrder | ft

我可以让用户输入的属性返回数据,但前提是我将-Properties 参数设置为*

例如, Get-ADUser -SearchBase $OU -filter $filter -Properties * | Where-Object $accountStatus | Select-Object $guiPropsAsArray | Sort-Object $properySortBy @sortOrder | ft

但是,获取数据需要更长的时间。

我宁愿设置一些东西,使-Properties 的值与Select-Object 的值相匹配。在遵循我在Bug when submitting properties to Get-ADUser? Saving to CSV File (Powershell) 收到的建议后,我能够轻松地做到这一点

我确定这是我做错的小事,很容易解决。谢谢。

【问题讨论】:

  • 您说“一切都执行得又快又好!” -Properties $manualpropsAsArray,有什么问题?
  • 问题是它似乎可以很好地处理我输入的值(在脚本末尾,作为隔离问题的一种手段),但不适用于原来的数组在脚本前面创建(在 GUI 的帮助下)。我还应该说明我比较了两个数组的数据类型并且它们匹配。
  • 您没有向我们展示您的 $filter 变量包含的内容。至少我没有看到它被宣布。
  • 如果用户在 GUI 中没有输入任何内容,$filter 变量默认为“*”/通配符。
  • 我个人永远不会在这种类型的程序中使用where-object,因为它效率极低。我将创建一个可能的 LDAPFilter 属性数组,并使用 LDAP 查询语法构建过滤器。

标签: windows powershell active-directory


【解决方案1】:

看起来是“Where-Object”语句导致了问题。如果我删除它(及其管道),那么一切正常——我可以对“-Properties”和“Select-Object”使用相同的值。当我正在测试的阵列实际上相同时,为什么我会遇到这个问题,这是一个谜!不是破坏者,但我会将'-Properties'参数设置为wildstar。报告会花一点时间,但生活还在继续。

【讨论】:

    猜你喜欢
    • 2020-05-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多