使用.NET getAccessControl()输出洪水注册表ACL



我目前正在帮助同事制作一个脚本,以映像注册表中的所有ACL设置,因此我制作了一些代码,可以通过注册表循环多个线程,并在CSV中构建报告。

这很简单。注册表中有很多键,因此我已经广泛测试了每个CMDLET和.NET方法的执行时间,并且基于这些结果,大部分都使用.NET来使其尽可能高效。在这个特定问题的上下文中:我在每个索引键上执行Get-Item并在它们上调用.GetAccessControl()

这可以正常工作,但是具体的两个钥匙让我头疼:

HKEY_LOCAL_MACHINESOFTWAREClasses* HKEY_LOCAL_MACHINESOFTWAREClasses*shell

为什么,您可能会问?好吧,看看:

PS C:UsersStackOverflow> (gi HKLM:SOFTWAREClasses*).GetAccessControl().Count
4124
PS C:UsersStackOverflow> (gi HKLM:SOFTWAREClasses*shell).GetAccessControl().Count
175

ACL!

很多项目

我正在使用StreamWriter编写自己的CSV,这也可以正常工作,直到击中这两个键为止。当文件在文本编辑器中打开时,内容的预测是可以预测的,但是Microsoft Excel在尝试读取此内容时会完全断开。

我不知道为什么会发生这种情况,当我在regedit中打开这些键时,似乎没有Powershell返回这里的访问定义几乎没有。谁能澄清一下?

答案显然与问题一样简单。使用-LiteralPath进行Get-Item将解决此问题,因为路径包含通配符字符。

最新更新