【发布时间】:2020-11-30 23:03:36
【问题描述】:
我正在尝试编写一个程序,让用户在 Active Directory 上执行不同类型的查询。我想以一种让他们选择要在输出中显示的属性的方式来制作它,并以多种方式过滤输出。 由于我在编写代码期间不知道他们会选择多少个属性,这似乎是从属性列表中生成一个字符串并使用 invoke-expression 调用该字符串的最简单方法。这种方式与属性完美结合,但完全不适用于过滤器。
我发现了几种过滤器语法,但是当我将它们放在一个字符串中并尝试使用“Invoke-expression”调用它时,它们都不起作用
这个:
$time = (Get-Date).Adddays(-(19))
Get-ADUser -Filter {LastLogonTimeStamp -gt $time} -SearchBase 'CN=Users,DC=home,DC=local' -Properties samAccountname, LastLogonDate | Select-Object @{n='Felhasználónév'; e='samAccountName'}, @{n='Utolsó bejelentkezés'; e='LastLogonDate'} | Out-String
给我想要的结果。 虽然这样:
$time = (Get-Date).Adddays(-(19))
$out = "Get-ADUser -Filter {LastLogonTimeStamp -gt $time} -SearchBase 'CN=Users,DC=home,DC=local' -Properties samAccountname, LastLogonDate | Select-Object @{n='Felhasználónév'; e='samAccountName'}, @{n='Utolsó bejelentkezés'; e='LastLogonDate'} | Out-String"
Write-Host $out
Invoke-Expression $out
给我以下结果:
Get-ADUser -Filter {LastLogonTimeStamp -gt 05/05/2019 19:05:46} -SearchBase 'OU=Testing,DC=home,DC=local' -Properties samAccountname, LastLogonDate | Select-Object @{n='Username'; e='samAccountName'}, @{n='Last Logon'; e='LastLogonDat
e'}
Get-ADUser : Error parsing query: 'LastLogonTimeStamp -gt 05/05/2019 19:05:46' Error Message: 'Operator Not supported: ' at
position: '26'.
At line:1 char:1
+ Get-ADUser -Filter {LastLogonTimeStamp -gt 05/05/2019 19:05:46} -Sear ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ParserError: (:) [Get-ADUser], ADFilterParsingException
+ FullyQualifiedErrorId : ActiveDirectoryCmdlet:Microsoft.ActiveDirectory.Management.ADFilterParsingException,Microsoft
.ActiveDirectory.Management.Commands.GetADUser
为什么在从字符串调用它们时,所有其他命令都能完美运行,而这个却不行?有没有其他方法可以过滤结果?一开始我想在查询之前坚持过滤,而不是使用 where 子句,但如果过滤不起作用,我也会尝试。
【问题讨论】:
标签: powershell