在PowerShell中调用Get ADUser时,如何在筛选条件中强制转换AD属性?

在PowerShell中调用Get ADUser时,如何在筛选条件中强制转换AD属性?,powershell,active-directory,type-conversion,Powershell,Active Directory,Type Conversion,我想做什么: 使用PowerShell返回按存储在广告属性中的日期筛选的广告用户列表 问题 我要筛选的日期存储在一个具有字符串数据类型的AD属性中,特别是extensionAttribute12。这是不可谈判的人,我写的脚本 我很难在过滤器中正确使用语法,将该字符串转换为比较之前的日期 这是我的非工作代码: Import-Module ActiveDirectory $CurrentDate = Get-Date $CurrentDate = $CurrentDate.ToString('MM

我想做什么:
使用PowerShell返回按存储在广告属性中的日期筛选的广告用户列表

问题
我要筛选的日期存储在一个具有字符串数据类型的AD属性中,特别是
extensionAttribute12
。这是不可谈判的人,我写的脚本

我很难在过滤器中正确使用语法,将该字符串转换为比较之前的日期

这是我的非工作代码:

Import-Module ActiveDirectory

$CurrentDate = Get-Date
$CurrentDate = $CurrentDate.ToString('MM-dd-yyyy')
$OU = "OU=PIV_Users,OU=FakeOU,DC=fake,DC=com"
$30Days = (Get-Date).AddDays(-30)

Get-ADUser -SearchBase $OU -SearchScope OneLevel -Filter {(extensionAttribute12 -notlike "*" -or extensionAttribute12 -le $30days) -and (enabled -eq $true) -and (whencreated -lt $30Days)} -Properties * |
    Select-Object Name, samAccountName, extensionAttribute12, whenCreated, enabled, employeeType
这是错误:

Get ADUser:无效的类型“System.DateTime”。
参数名称:extensionAttribute12
第9行字符:1

我尝试添加一个演员阵容,如下所示

... -or **[DateTime]extensionAttribute12** -le $30days) ...
这给了我这个错误:

Get ADUser:分析查询时出错:'(extensionAttribute12-不象“*”-或[DateTime]extensionAttribute12-le$30天)-和(已启用-eq$true)-和(创建时-lt$30天)
错误消息:“40”处的“语法错误”。
第9行字符:1


据我所知,在广告搜索字符串中不可能将属性强制转换为其他类型。尽管使用了类似scriptblock的表示法,但参数
-Filter
的参数本质上是一个查询字符串

获取对象后,您可以通过
Where Object
进行过滤。这不是最优的(因为您的广告查询将返回比它需要的更多的对象),但在这种情况下,我看不到其他方法。但是,请确保只将过滤器的那些部分移动到
Where Object
,否则这些部分将不起作用,这样
Where Object
就不需要处理所有用户对象

Get-ADUser-Filter {extensionAttribute12 -notlike '*' -and enabled -eq $true -and whencreated -lt $30Days} ... |
    Where-Object { [DateTime]extensionAttribute12 -le $30days } |
    ...

我认为这在广告搜索字符串中是不可能的。获取数据后,您需要在
Where Object
条件下执行此操作。您能否在回答中提供一个示例,以便我可以对其进行升级?无法测试,因为我的本地计算机上没有active directory模块,您能否尝试以下
Get ADUser-SearchBase$OU-SearchScope OneLevel | Where{$\u0.extensionAttribute12-不喜欢“*”..…其他属性}|选择对象名称、samAccountName、extensionAttribute12,在创建、启用时,选择有效的employeeT
。请输入答案,以便我投票并接受。你值得独角兽流泪!为了解决您对返回太多对象的担忧,我将大部分条件保留在Get ADUser筛选器中,以最小化初始拉取中的对象,并且仅在WhereObject部分的筛选器中需要进行类型转换的地方应用筛选器。谢谢