Netz-Weise Logo

Weisheiten - der Netz-Weise Blog

Hier finden Sie Tipps und Tricks für vor, während und nach der Schulung.
1 Minuten Lesezeit (270 Worte)

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 
BBB Greenlight Userkennwort per SSH ändern
Manuelle Upgrade von Windows schlägt mit Fehler "W...

Ähnliche Beiträge

 

Kommentare

Derzeit gibt es keine Kommentare. Schreibe den ersten Kommentar!
Bereits registriert? Hier einloggen
Mittwoch, 08. Mai 2024

Sicherheitscode (Captcha)