Active directory 获取ADUser-搜索过期帐户。在命令中使用变量

Active directory 获取ADUser-搜索过期帐户。在命令中使用变量,active-directory,windows-server,powershell-5.0,Active Directory,Windows Server,Powershell 5.0,我目前正在开发Powershell GUI脚本,以帮助我的团队更轻松地找到密码过期、帐户被禁用等的帐户,并将其输出到CSV。它几乎完全围绕Get ADUser命令展开。到目前为止,除了查找密码过期的帐户外,几乎所有工作都正常进行 我已经对此进行了大量研究,但似乎没有简单的方法可以使用Get ADUser查找过期帐户。我知道我可以用Search-ADAccount来代替,但是这样做会很尴尬,因为我需要重新编写很多代码 Get Aduser-Properties*-Filter{PasswordEx

我目前正在开发Powershell GUI脚本,以帮助我的团队更轻松地找到密码过期、帐户被禁用等的帐户,并将其输出到CSV。它几乎完全围绕Get ADUser命令展开。到目前为止,除了查找密码过期的帐户外,几乎所有工作都正常进行

我已经对此进行了大量研究,但似乎没有简单的方法可以使用Get ADUser查找过期帐户。我知道我可以用Search-ADAccount来代替,但是这样做会很尴尬,因为我需要重新编写很多代码

Get Aduser-Properties*-Filter{PasswordExpired-eq$true}只是画了一个空白

我在上找到了一个部分解决方案

比如说,

获取ADUser-Properties*-Filter*|?{$\.PasswordExpired-eq$True-和$\.Enabled-eq$True}选择对象名称,启用|导出Csv C:\report.Csv-NoTypeInformation

工作正常,但如果我尝试分配命令的“中间”,即

{$\.PasswordExpired-eq$True-和$\.Enabled-eq$True}

我要么得到一个错误,一个AD中所有变量的列表,要么一个人也没有。替换变量的理由是允许用户通过选择单选按钮选择可能的帐户状态

我尝试了各种双引号和单引号的排列,包括和不包括花括号等,但Powershell不会让我休息


谢谢

我想我已经在堆栈交换上找到了解决方案

早期测试表明它可以工作。

Get-ADUser cmdlet公开PasswordExpired扩展属性,该属性是一个布尔值,指示密码是否过期。它基于msDS用户帐户控制计算属性。但是,不能使用此属性进行筛选

这意味着您可以检查该属性上的UF_密码_过期位:

获取ADUser-已启用筛选器-eq“True”-属性“已计算msDS用户帐户控制”| 其中,对象{$\.'msDS-User-Account-Control-Computed'-band 0x800000-eq 0x800000}{124; UF_PASSWORD_过期->0x800000=8388608 选择对象名称,已启用|导出Csv C:\report.Csv-notype信息 您可以通过扩展筛选器来排除PasswordNeverExpires和PasswordNotRequired均为$false的用户,从而加快上述速度:

$filter=Enabled-eq'True'-和PasswordNeverExpires-eq'False'-和PasswordNotRequired-eq'False' Get ADUser-Filter$Filter-Properties PasswordNeverExpires,PasswordNotRequired,'msDS用户帐户控制计算'| 其中,对象{$\.'msDS-User-Account-Control-Computed'-band 0x800000-eq 0x800000}{124; UF_PASSWORD_过期->0x800000=8388608 选择对象名称,已启用|导出Csv C:\report.Csv-notype信息
您的筛选器不应是脚本块;尝试获取ADUser-Properties*-过滤器'PasswordExpired-eq TRUE-和Enabled-eq TRUE'。我不会发誓现在不在一个广告系统上测试它,但我认为你可以省略-eq-TRUE的两个实例。嗨,杰夫。我已经试过了。”PasswordExpired'显然是一个方法或计算值,因此其工作方式与Get ADUser的筛选属性(如Enabled)不同。