刮取远程注册表并报告凭据提供程序

时间:2017-08-18 11:30:40

标签: powershell

我在Powershell上并不热,但是我正在寻找一个解决方案,我可以报告我的Windows域中PC和服务器使用的凭据提供程序。

我发现https://gallery.technet.microsoft.com/scriptcenter/Detect-Authentication-09b0a749(注意:下面没有使用它)在当前会话中工作正常,但我希望我的脚本能够远程对所有Window OS计算机运行并生成报告。

我想输出用户名,使用的提供程序(基于与提供程序对应的regkey值)和使用的计算机。如果计算机无法连接,我希望它能够优雅地告知故障。我觉得'只是'扫描注册表中的特定键并输出它们似乎运行良好,但我的脚本遇到了一些问题:

  • $ KeyCheck1 / 2似乎无效。如果SessionData \ 1存在,脚本运行正常,这不会找不到密钥和错误......

  • 我使用了一些不同的提供商,因此'If $ Provider ='。问题是这似乎没有提升价值,因为它总是返回相同的结果(Duo Secure)!

  • 由于某种原因,我的输出正在降低$ RemotePC

  • 的值

现在我只是使用write-host查看发生了什么,最终我希望通过电子邮件发送结果(我应该对此感到满意,但任何提示可能会缓解一切)

任何建议都将不胜感激。

Get-Adcomputer -filter {OperatingSystem -like "Windows 7 Ent*"} -properties DNSHostName | ForEach-Object {"$($_.DNSHostName)"} | Out-file -FilePath "U:\Computers.txt"

$filePath = "U:\Computers.txt"

$computerList = Get-Content $filePath

foreach($RemotePC in $computerList){

    if((Test-Connection -ComputerName $remotePC -Count 1 -ErrorAction SilentlyContinue)) {
    $session = New-PSSession -ComputerName $RemotePC
    Invoke-Command -Session $Session -ScriptBlock{

        $KeyCheck1 = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\1'
        $KeyExists1 = Test-Path $KeyCheck1 -IsValid
        If ($KeyExists1 -eq $True) 
            {
            $key1 = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\1'
            $Provider = (Get-ItemProperty -Path $key1 -Name LastLoggedOnProvider)
            $User = (Get-ItemProperty -Path $key1 -Name LoggedOnSAMUser).LoggedOnSAMUser

            $Provider = (Get-ItemProperty -Path $key1 | Select LastLoggedOnProvider)
            $User = (Get-ItemProperty -Path $key1 | Select LoggedOnSAMUser).LoggedOnSAMUser

            If ($Provider = '{449B5F65-C836-4EB0-A00A-71C47EF75210}')
                {
                $UsedProvider = "Duo Secure"
                }
            ElseIf ($Provider = '{8bf9a910-a8ff-457f-999f-a5ca10b4a885}')
                {
                $UsedProvider = "Smart Card"
                }
            ElseIf ($Provider = '{8FD7E19C-3BF7-489B-A72C-846AB3678C96}')
                {
                $UsedProvider = "SmartCard" 
                }
            ElseIf ($Provider = '{25CBB996-92ED-457e-B28C-4774084BD562}')
                {
                $UsedProvider = "Password Only!"
                }
            Write-host $User used $UsedProvider on $RemotePC
            }
    Else 
        {
        $KeyCheck2 = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\2'
        $KeyExists2 = Test-Path $KeyCheck2 -IsValid
        If ($KeyExists2 -eq $True)
            {
            $key2 = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\LogonUI\SessionData\2'
            $Provider = (Get-ItemProperty -Path $key2 -Name LastLoggedOnProvider)
            $User = (Get-ItemProperty -Path $key2 -Name LoggedOnSAMUser).LoggedOnSAMUser

            $Provider = (Get-ItemProperty -Path $key2 | Select LastLoggedOnProvider)
            $User = (Get-ItemProperty -Path $key2 | Select LoggedOnSAMUser).LoggedOnSAMUser

            If ($Provider = '{449B5F65-C836-4EB0-A00A-71C47EF75210}')
                {
                $UsedProvider = "Duo Secure"
                }
            ElseIf ($Provider = '{8bf9a910-a8ff-457f-999f-a5ca10b4a885}')
                {
                $UsedProvider = "Smart Card"
                }
            ElseIf ($Provider = '{8FD7E19C-3BF7-489B-A72C-846AB3678C96}')
                {
                $UsedProvider = "SmartCard" 
                }
            ElseIf ($Provider = '{25CBB996-92ED-457e-B28C-4774084BD562}')
                {
                $UsedProvider = "Password Only!"
                }
            Write-host $User used $UsedProvider on $RemotePC
            }
        }   
    }
Remove-PSSession $session
}
Else
    {    

    }
}

0 个答案:

没有答案