获取active directory信息时,如何在powershell中处理连字符名称



我正试图使用powershell为具有连字符名称(IE firstname.lastname(的用户获取active directory中的密码过期日期,在连字符名称上,它会发出无效的cmdlet错误。如何查询带连字符的姓名?

我现在的命令是

net user $username /DOMAIN | find "Password expires"

也许可以使用ActiveDirectory模块而不是net命令:

$MaxPwdAge = (Get-ADDefaultDomainPasswordPolicy).MaxPasswordAge.Days
Get-ADUser -Filter { Name -like "*-*" } -Properties 'PasswordLastSet', 'DisplayName' |
Select-Object Name,DisplayName,
@{ Name = 'PasswordExpires'; Expression = { $_.PasswordLastSet.AddDays( $MaxPwdAge ) } }

如果需要,您可以更改过滤器以查看DisplayName,而不是-Filter { DisplayName -like "*-*" }

您可能需要根据要在输出中包含的内容来调整正在检索的属性。这只是一个例子,但它很有效,可以用来规划前进的道路。看来你必须计算一下有效期。但我可以继续努力,看看是否有更好的方法。

如果您想查询特定用户:

Get-ADUser Name-Name -Properties 'PasswordLastSet',DisplayName |
Select-Object Name,DisplayName,
@{ Name = 'PasswordExpires'; Expression = { $_.PasswordLastSet.AddDays( $MaxPwdAge ) } }

这假设连字符名称是samAccountName。如果您需要按DisplayName进行搜索,即使您只查找一个用户,也必须重新使用过滤器。

Get-ADUser -Filter { DisplayName -eq "Name-Name" } -Properties 'PasswordLastSet',DisplayName |
Select-Object Name,DisplayName,
@{ Name = 'PasswordExpires'; Expression = { $_.PasswordLastSet.AddDays( $MaxPwdAge ) } }

注意:您必须更改";名称名称";。同样在上一个例子中,我改为使用-eq运算符而不是-like。显然,这是假设你确切地知道自己在寻找什么。尽管您可以将-Like与DisplayName一起使用,如果您愿意,甚至可以使用surName属性。

最新更新