我目前正在帮助同事制作一个脚本,以映像注册表中的所有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
将解决此问题,因为路径包含通配符字符。