Weisheiten - der Netz-Weise Blog
Den Datentyp eines Registry-Eintrags mit Powershell ermitteln.
Die Registry ist technisch gesehen eigentliche ein Datenbank für Schlüssel-Wertepaare. Im Gegensatz zu Linux, wo jedes Programm sein eigene Konfiguration in einer Textdatei verwaltet, hat Microsoft die Konfigurationsverwaltung mit der Registry zentralisiert.
Eine Besonderheit der Registry ist die Tatsache, dass jeder verwaltete Wert einen Datentyp hat, also z.B. String (Reg_SZ), oder Int (Reg_DWord). Wenn man den Registrierungswert abfragt, liefert Powershell den Datentyp allerdings nicht zurück.
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ -Name ProgramFilesDir ProgramFilesDir : C:\Program Files PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows PSChildName : CurrentVersion PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry
Das ist ziemlich ärgerlich, da Get-ItemProperty ziemlich viele Informationen zurückliefert, die eigentlich niemand braucht, und Microsoft deshalb sogar ein eigene CmdLet in Powershell 5 integriert hat, dass nur den Inhalt des Wertes zurück liefert - Get-ItemPropertyValue.
Den Datentyp eines Registry-Eintrags zu ermitteln, ist aber über den Schlüssel (Ordner) möglich, zu dem die Eigenschaft gehört. Die Items haben eine ganze Reihe von zusätzlichen Methoden, mit denen Sie z.B. Berechtigungen setzen können.
$item = Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\ $item | get-member -MemberType Method TypeName: Microsoft.Win32.RegistryKey Name MemberType Definition ---- ---------- ---------- Close Method void Close() CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObj CreateSubKey Method Microsoft.Win32.RegistryKey CreateSubKey DeleteSubKey Method void DeleteSubKey(string subkey), void D DeleteSubKeyTree Method void DeleteSubKeyTree(string subkey), vo DeleteValue Method void DeleteValue(string name), void Dele Dispose Method void Dispose(), void IDisposable.Dispose Equals Method bool Equals(System.Object obj) Flush Method void Flush() GetAccessControl Method System.Security.AccessControl.RegistrySe GetHashCode Method int GetHashCode() GetLifetimeService Method System.Object GetLifetimeService() GetSubKeyNames Method string[] GetSubKeyNames() GetType Method type GetType() GetValue Method System.Object GetValue(string name), Sys GetValueKind Method Microsoft.Win32.RegistryValueKind GetVal GetValueNames Method string[] GetValueNames() InitializeLifetimeService Method System.Object InitializeLifetimeService( OpenSubKey Method Microsoft.Win32.RegistryKey OpenSubKey(s SetAccessControl Method void SetAccessControl(System.Security.Ac SetValue Method void SetValue(string name, System.Object ToString Method string ToString()
Die Methode GetValueKind() ist das, was wir brauchen. Sie liefert den .Net Datentyp zurück.
$item.GetValueKind('ProgramFilesDir') String
Kommentare