将 SSL 和 TLS 注册表项导出到 XLSX

将 SSL 和 TLS 注册表项导出到 XLSX

我目前正在寻找系统上的所有 SSL 和 TLS 注册表值信息。我需要帮助为 powershell 编写一个脚本来查看 csv/txt 文件中的主机列表,然后执行以下命令,将结果保存为 csv/XLSX 格式,其中包含计算机名称、SSL 和 TLS 注册表项。

#Get computers from text file. 1 compute per line
Clear-Host
$myComputerList = 'ABC' #Get-Content C:\Servers.txt

#Loop Through Array
ForEach ($computer in $myComputerList) {
    #Execute a command on the computer
    Invoke-Command -ComputerName $computer -ScriptBlock {
        #This is the command to execute
        #Grab the registry value you want and hold it in a variable
Get-ChildItem -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\'
Get-ChildItem -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\'
} #| Out-File -FilePath C:\Output.csv -Append
}

上述代码按预期工作,但是当我将其导出为 CSV/XLSX 格式时,格式不太好,如下所示:

在此处输入图片描述

输出

配置单元:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0

名称属性 PSComputerName


客户端默认禁用:0 ABC
启用:0
服务器默认禁用:0 ABC
启用:0

Hive: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders
\SCHANNEL\Protocols\TLS 1.0

名称属性 PSComputerName


客户端默认禁用:1 ABC
启用:
4294967295
服务器默认禁用:0 ABC
启用:
4294967295

从上面的输出中,我不需要整个 Hive 路径,只需要输出中的 SSL 或 TLS。

请帮助我获取预期的代码

提前致谢

寻找以下输出 在此处输入图片描述

答案1

  1. 从 Excel 中打开文件
  2. 使用文本导入向导将文本拆分为列(将连续的空格和/或制表符视为一个)
  3. 如果向导没有弹出,并将所有内容导入到一列中,请选择列,然后单击数据>文本到列
  4. 或数据 > 来自文本(将数据打开为数据源,即链接到的 csv 文件保持完整,可以按计划、打开或手动刷新)
  5. 在新工作表上,使用 Excel 公式或 VBA 代码提取并重新格式化数据(VBA 可以在同一工作表上重新格式化数据,删除不必要的行和单元格等。使用 Excel 公式选项以及数据源导入可以提供一种灵活、简单的方法来汇总数据,特别是在数据经常变化的情况下

如果您很幸运,导入的数据中有一个固定的模式,比如说每 10 行在 G 列中包含一个计算机名称,那么在新工作表中,您可以从行中挑选计算机名称,从 Sheet2 单元格 G1 开始,然后向下拖动此公式:

=INDEX(sheet1!$G:$G,(ROW()-1)*10+1

答案2

您遇到的问题是,使用自定义格式Microsoft.Win32.RegistryKey返回的对象Get-ChildItem在控制台中显得更具可读性(此格式在中定义$PSHome\Registry.format.ps1xml)。

复制一些格式化命令并将其输出到真正的CSV中:

ForEach ($computer in $myComputerList) {
    #Execute a command on the computer
    Invoke-Command $computer {
        Get-ChildItem 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\' |
            Select PSParentPath,PSChildName,@{l='Properties';e={
                (Get-ItemProperty -LiteralPath $_.PSPath |
                    Select * -Exclude PSPath,PSParentPath,PSChildName,PSDrive,PsProvider |
                    Format-List | Out-String | Sort).Trim()
            }}
    } | select PSComputerName,@{l='Name';e={$_.PSParentPath  -split '\\' | select -Last 1}},PSChildName,Properties | export-csv C:\temp\test.csv -NoTypeInformation -Append
}

这是 Excel 中的输出(我必须扩大单元格):

在此处输入图片描述

您必须复制Get-ChildItem每个协议名称的块

答案3

您还可以尝试从注册表中提取单个属性,如下所示:

Get-ItemProperty -path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client' -name DisabledByDefault  | select-object -ExpandProperty DisabledByDefault

我的注册表中没有这些注册表项,因此无法验证它是否能 100% 正常工作。

相关内容