我在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
{
}
}