vb.net - 获取密码过期的 Active Directory 用户列表
问题描述
再会!
我知道如何在 ActiveDirectory 中查看用户密码的到期日期:
Public Shared Function GetPasswordExpirationDate1(ByVal userId As String) As Date
Dim forestGc As String = String.Format("GC://{0}", Forest.GetCurrentForest().Name)
Dim searcher = New DirectorySearcher(New DirectoryEntry(forestGc)) With {
.Filter = "(sAMAccountName=" & userId & ")"
}
Dim results = searcher.FindOne().GetDirectoryEntry()
Return CDate(results.InvokeGet("PasswordExpirationDate"))
End Function
问题。如何显示密码将在 10 天后过期的用户的完整列表?列出在 DataGridView 中的字段:sAMAccountName 和密码到期日期。
解决方案
我知道,因为看起来您正在尝试使用 vb.net 执行此操作,您只需运行以下 PowerShell 命令,然后将其输出通过管道传输到您想要的任何位置。您可能必须像下面的示例一样创建一个 PowerShell 实例,然后只需在 Win 表单应用程序中运行使用 C# 执行此操作的代码。
创建 Powershell 运行空间:
private string RunScript(string script)
{
Runspace runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();
pipeline.Commands.AddScript(script);
pipeline.Commands.Add("Out-String");
Collection<PSObject> results = pipeline.Invoke();
runspace.Close();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject pSObject in results)
stringBuilder.AppendLine(pSObject.ToString());
return stringBuilder.ToString();
}
将 powershell 命令调用到运行空间(您可以将此代码放在按钮单击或其他位置):
_ = RunScript("Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq
$False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" | Select-
Object -Property "sAMAccountName",@{Name="ExpiryDate";Expression=
{[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}");
然后使用“Out-String”将输出通过管道传输到数据网格视图。
推荐阅读
- java - Java如何将cmyk原始图像数据转换为jpeg?
- java - 带有 @RequestBody 的 GET REST API
- node.js - Nodejs应用程序docker无法连接到mongodb docker容器
- javascript - 如何动态地将数组命名为 .map 就可以了
- amazon-web-services - Hadoop 2.9.2 AWS
- android - Android Room数据库项目中的多个DAO和存储库?
- angular6 - 如何在scss中导入多张图片
- dynamic-data - 如果 SourceList 为空,如何禁用 WinForms 按钮
- reactjs - 如何避免缓存 create-react-app
- reactjs - 如何在 appBar 上显示用户信息(姓名或头像)?