净用户$ userName / domain

时间:2018-07-13 20:05:38

标签: windows powershell active-directory cmdlets cmdlet

我正在尝试为我们的支持团队创建一个模块,其中将包含我们每天使用的一些工具,但直到现在我们仍使用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

1 个答案:

答案 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属性的一个很好的起点。