我正在尝试为我们的支持团队创建一个模块,其中将包含我们每天使用的一些工具,但直到现在我们仍使用CMD。
我们使用的命令之一是net user $username /domain
,目的是检查用户密码是否已过期以及命令输出的所有其他有用信息。
我试图将该命令放在这样的函数中:
function Get-UserDetails {
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[string]$UserName
)
net user $UserName /domain
}
该函数工作正常,但我只想过滤输出以获取一些细节。
问题是net user
不是PowerShell cmdlet,它没有属性,因此我无法选择其中的任何一个。
所以我的问题是:
您知道一种通过一条命令获取所有数据的更好方法吗?因为Get-ADUser
输出的数据少于net user
。
答案 0 :(得分:1)
您可以使用Get-ADUser
并从中选择msDS-UserPasswordExpiryTimeComputed
属性。问题是-即使使用-Properties *
,此属性也可能无法枚举,因此在尝试检查返回的对象时可能不明显。为了使事情 甚至更好 ,时间戳记不是人们可以理解的格式。
尽管如此,您仍可以从AD cmdlet获取密码的到期日期,并使其易于阅读,如下所示:
# Get ADUser
$user = Get-ADUser username -Properties msDS-UserPasswordExpiryTimeComputed
# Get expiry timestamp and convert it from file time format
$userCredExpiryDate = [DateTime]::FromFileTime( $user.'msDS-UserPasswordExpiryTimeComputed' )
Here is the MSDN documentation for that AD DS attribute。
对于在net user /domain
中显示但不在Get-ADUser
中显示的其他字段值-如果没有显示-Properties *
,则应该搜索其他AD DS属性。对于这些,您将需要在AD DS文档中寻找适当的属性。
更新:Someone linked me to this page上的another question(与此行为有关),这似乎列出了可用于处理的其他属性,但在尝试查找时不会返回在对象的“所有” AD DS属性上。我不知道此列表的完整性如何,但这是了解您必须使用哪些其他AD属性的一个很好的起点。