Son RegistryKey propiedades realmente los objetos de Cadena en powershell?

0

Pregunta

En powershell, es posible obtener una matriz de RegistryKeys de la siguiente manera:

$hkeys = Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

Cuando me inspeccionar el primer elemento de esta matriz, esto es lo que obtengo:

    Hive: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall


Name                           Property                                                                                                                    
----                           --------                                                                                                                    
7-Zip                          DisplayName     : 7-Zip 21.03 beta (x64)                                                                                    
                               DisplayVersion  : 21.03 beta                                                                                                
                               DisplayIcon     : C:\Program Files\7-Zip\7zFM.exe                                                                           
                               InstallLocation : C:\Program Files\7-Zip\                                                                                   
                               UninstallString : "C:\Program Files\7-Zip\Uninstall.exe"                                                                    
                               NoModify        : 1                                                                                                         
                               NoRepair        : 1                                                                                                         
                               EstimatedSize   : 5237                                                                                                      
                               VersionMajor    : 21                                                                                                        
                               VersionMinor    : 3                                                                                                         
                               Publisher       : Igor Pavlov                                                                                               

Property parecía un poco extraño, así que lo miré más allá, hacia:

> $hkeys[0].property.gettype

IsPublic IsSerial Name                                     BaseType                                                                                        
-------- -------- ----                                     --------                                                                                        
True     True     String[]                                 System.Array                                                                                    

Los elementos en la property atributo, ya que están delimitados por dos puntos : no parece, como cadenas, así que busqué un poco más, pero se encontró que de hecho están String objetos:

> $hkeys[0].property[0].gettype

IsPublic IsSerial Name                                     BaseType                                                                                        
-------- -------- ----                                     --------                                                                                        
True     True     String                                   System.Object                                                                                   

Ya que parecía ser objetos de cadena, traté de echo la primera. Sin embargo, sólo se muestra la primera parte de la cadena y no la parte después de los dos puntos:

> $hkeys[0].property[0]
DisplayName

Siento que hay algo fundamental que no entiendo aquí. Son los elementos de la matriz realmente String los objetos? Si es así, ¿por qué no la parte después de los dos puntos aparecen?

arrays object powershell registry
2021-11-23 17:08:14
1

Mejor respuesta

1

Los objetos de registro han definido un formato de salida que powershell utiliza cuando no es en formato dado. Usted puede leer más aquí about_Format.ps1xml

Usted puede probar esta llamando

$hkeys #formated with name:value, actually uses $hkeys | Out-Default

$hkeys | Format-Table Property #value won't show anymore

$hkeys | Format-List #value won't show anymore

El formato predeterminado del archivo de registro (ex: C:\Windows\System32\WindowsPowerShell\v1.0\Registry.format.ps1xml) mostrará la Propiedad de la siguiente

$result = (Get-ItemProperty -LiteralPath $_.PSPath |
    Select * -Exclude PSPath,PSParentPath,PSChildName,PSDrive,PsProvider |
    Format-List | Out-String | Sort).Trim()
$result = $result.Substring(0, [Math]::Min($result.Length, 5000) )
if($result.Length -eq 5000) { $result += "..." }
$result

y como te has dado cuenta, el resultado es un string[]

Para obtener el valor real en powershell que usted necesita llamar a un método o uso Get-ItemProperty

$hkeys[0].getvalue('DisplayName') #you have to specify the property name
# or
$hkeys[0] | Get-ItemProperty
2021-11-23 21:18:45

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................