Saat ini saya sedang membantu rekan kerja membuat skrip yang menggambarkan semua pengaturan ACL di registri, jadi saya membuat beberapa kode yang mengulang registri dengan beberapa utas dan membuat laporan dalam CSV.
Ini cukup mudah. Ada banyak kunci dalam registri jadi saya telah menguji secara ekstensif setiap cmdlet dan metode .NET untuk waktu eksekusi dan, berdasarkan hasil tersebut, sebagian besar menggunakan .NET untuk membuatnya seefisien mungkin. Dalam konteks pertanyaan khusus ini: Saya melakukan Get-Item
pada setiap kunci yang diindeks dan memanggil .GetAccessControl()
pada kunci tersebut.
Ini berfungsi dengan baik, tetapi ada dua kunci khusus yang membuat saya pusing:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\*\shell
Mengapa, Anda mungkin bertanya? Nah, lihat ini:
PS C:\Users\StackOverflow> (gi HKLM:\SOFTWARE\Classes\*\).GetAccessControl().Count
4124
PS C:\Users\StackOverflow> (gi HKLM:\SOFTWARE\Classes\*\shell).GetAccessControl().Count
175
Itu banyak sekali item untuk ACL!
Saya menggunakan StreamWriter untuk menulis CSV saya sendiri, ini juga berfungsi dengan baik hingga mencapai kedua kunci ini. Ketika file dibuka di editor teks, isinya seperti yang diperkirakan, tetapi Microsoft Excel benar-benar rusak saat mencoba membaca ini.
Saya tidak tahu mengapa ini terjadi, ketika saya membuka kunci ini di regedit sepertinya tidak ada definisi akses sebanyak PowerShell yang kembali ke sini. Adakah yang bisa menjelaskan hal ini?
(gi HKLM:\SOFTWARE\).GetAccessControl()
akan menghasilkan beberapa hasil. Tetapi ketika Anda melakukan hal yang sama pada dua kunci yang saya sebutkan dalam pertanyaan saya, hasilnya buruk. - person Chavez   schedule 21.04.2017$Output.GetEnumerator() | % { $stream.WriteLine("
$($_.Key)";
$($_.Value)"") }
- person Chavez   schedule 24.04.2017