我使用Powershell To Check Local Admin Credentials作为此代码段的基础,并遇到了问题。 (不想诈骗)
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$pc = New-Object System.DirectoryServices.AccountManagement.PrincipalContext('machine',$entry)
if($pc.ValidateCredentials("secretadmin", "secretpassword")){Write-host "good"}else{write-host "bad"}
大约50%的时间都有效。剩下的时间,我得到了这个
使用“2”参数调用“ValidateCredentials”的异常: “同一用户与服务器或共享资源的多个连接, 不允许使用多个用户名。断开所有连接 之前与服务器或共享资源的连接,请重试。
这让我想起了使用net use验证凭据的批处理脚本,我们只需要删除映射驱动器来解决问题。因为没有我知道的保存对象,我不确定如何清除此登录。我检查了登录用户并且没有看到任何内容
基本上,我们正在为医院建立数百台服务器,并且需要确保遵守政策,检查这些凭据只是其中的一部分,但这是我遇到问题的地方。
非常感谢任何帮助。在提出这些问题之前,请注意一下。凭证是正确的,它们在脚本中是硬编码的,我可以收到故障,并立即通过RDP和psexec使用相同的凭据登录错误。防火墙允许从我的主机到目的地。
答案 0 :(得分:2)
PrincipalContext
实施IDisposable
所以我建议这样做:
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
$pc = New-Object DirectoryServices.AccountManagement.PrincipalContext('machine',$entry)
try {
if($pc.ValidateCredentials("secretadmin", "secretpassword")) {
Write-host "good"
}
else {
Write-host "bad"
}
}
finally {
$pc.Dispose()
}