读取和比较注册表项的脚本

时间:2019-07-06 20:29:29

标签: powershell registrykey

我对PowerShell还是很陌生,因此我一直陷在这个问题上。

  • 从以下两个位置读取注册表项: 项目说明。
       HKEY_CURRENT_USER /软件/ Microsoft / Windows / CurrentVersion /运行    HKEY_LOCAL_MACHINE /软件/ Microsoft / Windows / CurrentVersion / Run
  • 将每个条目与可接受条目的列表进行比较。可以接受的 条目列表来自名为“ Acceptable_Reg.txt”的文本文件,该文件 下载脚本后,脚本将随脚本一起提供。
  • 生成一个文本文件报告,其中列出了所有不可接受的注册表 条目。使用计算机名称作为文件名保存报告。
  • 将报告文件传输到以下Intranet地址: intranet.xyzcompany.com/bad_reg.aspx

到目前为止,我已经提出了这个建议...但是我认为这不是正确的解决方法。我知道我可能需要使用compare-object cmdlet,但是不确定如何应用它。

$path1 ="HKCU:\Software\Microsoft\Windows\CurrentVersion\Run"
$path2 = "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run
$destination = "(FileName.txt)"
$results = Get-ItemProperty $path1 $path2

在这方面的任何帮助将不胜感激,因为我的教授无法为我提供有关实际脚本的任何类型的帮助。

1 个答案:

答案 0 :(得分:0)

要比较是否已导出reg文件,可以执行以下操作:

$location1 = "C:\temp\location1";
$location2 = "C:\temp\location2";
$location3 = "C:\temp";

Compare-Object $(Get-Content "$location1\file1.reg") $(Get-Content "$location2\file2.reg") | 
    Where-Object { IsNotAccepted($_.InputObject) } | 
    Out-File "$location3\NotAcceptedEntries.txt" -Force

function IsNotAccepted($entry){
    $accepted = $false;
    # $name = $entry.Split('=')[0]
    # $value = $entry.Split('=')[1]

    # Put your logics here

    return -Not($accepted);
}

请注意,$_.InputObject代表条目,例如

  

“ C:\ Program Files(x86)\ 7-Zip \ 7z.exe.FriendlyAppName” =“ 7-Zip   控制台2“

您还可以通过检查$_.SideIndicator来知道该文件在哪个文件中。如果返回=>,则意味着正确的文件(file2.reg)有所不同。相反,<=表示在左文件(file1.reg)中发现了差异。