Powershell - 本地凭证验证

时间:2013-11-11 16:20:03

标签: windows powershell scripting

我使用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使用相同的凭据登录错误。防火墙允许从我的主机到目的地。

1 个答案:

答案 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()
}