【发布时间】: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