【问题标题】:Powershell - local credential verificationPowershell - 本地凭证验证
【发布时间】:2013-11-12 06:55:53
【问题描述】:

我使用Powershell To Check Local Admin Credentials 作为这个 sn-p 的基础,但遇到了问题。 (不想线程劫持)

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 登录。防火墙允许任何从我的主机到目的地。

【问题讨论】:

    标签: windows powershell scripting


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多