列出所有用户在非域名系统上的最后一次Windows密码更改

列出所有用户在非域名系统上的最后一次Windows密码更改

问题描述:

我已经为连接到AD域控制器的系统找到了此问题的答案。但是,这个问题适用于无法连接到域控制器的独立系统。基本上,气隙系统。列出所有用户在非域名系统上的最后一次Windows密码更改

短而甜:有没有一种方法可以列出每个用户最后一次将非密码空闲系统(Windows 7或10)的Windows密码更改为批处理文件或PowerShell脚本?

我知道net user {username} |找到/我“上次设置的密码”将一次为他们做。然而,每台机器运行多次会很繁琐,而且我们有超过60个这种类型的系统。所以如果可能的话,我正在寻找一种方法来做到这一点。

作为一个告诫,我们没有选择在PowerShell中为此安装activedirectory模块。此外,由于大多数系统是Windows 7,我们无法访问Windows 10中可用的Bash命令行工具。

任何和所有关于此的帮助表示赞赏。

+0

不'NET USER'列表中的本地帐户?你可以编写一个调用'NET USER'获取账户的批处理脚本,然后遍历该列表并调用'NET USER {username} |找到/我“密码上次设置”? – aphoria

+0

是的,NET USER列出所有本地帐户。但是,NET USER以一种格式返回它的输出,由于字段的设置方式,我不确定如何处理。否则,是的,一个简单的NET USER运行并将其管道化为文本文件并通过循环机制读取它将是一个简单的选择。 – EvilEuro

下面是一个使用ADSI WinNT提供一种方法:

$computerName = [Net.Dns]::GetHostName() # i.e., local computer 
$computer = [ADSI] "WinNT://$computerName,Computer" 
$childObjects = $computer.Children 
foreach ($childObject in $childObjects) { 
    if ($childObject.Class -eq "User") { 
    if ($childObject.PasswordAge[0] -gt 0) { 
     $pwdLastSet = (Get-Date).AddSeconds(-$childObject.PasswordAge[0]) 
    } 
    else { 
     $pwdLastSet = $null 
    } 
    $childObject | Select-Object ` 
     @{Name="AdsPath";   Expression={$_.AdsPath}}, 
     @{Name="PasswordLastSet"; Expression={$pwdLastSet}} 
    } 
} 
+0

由于某种原因,当我们试图运行它时,这个挂起。我们没有得到任何产出,必须努力突破才能退出。不完全确定为什么,但我们也不能调用调试器。唯一出现的是脚本运行的完整路径,但输出为零。奇怪的。 – EvilEuro

+0

我无法复制它。 –

+0

你在Powershell ISE中运行它吗? – Compo