Czy naprawdę właściwości obiektu registrykey są ciągami, jak w powershell?

0

Pytanie

W powershell można uzyskać tablicę RegistryKeys w następujący sposób:

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

Kiedy sprawdzam pierwszy element tej tablicy, oto co mam:

    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 wydało się trochę dziwne, więc zagłębił się w to:

> $hkeys[0].property.gettype

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

Elementy w property atrybut, tak jak są one oddzielone dwukropkiem : nie wygląda na struny, więc spojrzałem trochę dalej, ale okazało się, że oni naprawdę String Obiekty:

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

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

Ponieważ wydawały się ciągami obiektami, próbowałem powtórzyć pierwszy. Jednak on pokazuje tylko pierwszą część wiersza, a nie część po przecinku:

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

Czuję, że jest coś ważnego, czego ja tu nie rozumiem. Czy elementy tablicy String obiekty? Jeśli tak, to dlaczego nie pojawia się część po dwukropku?

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

Najlepsza odpowiedź

1

Obiekty rejestru mają określony format wyjściowy, który wykorzystuje powershell, kiedy format nie jest określony. Możesz przeczytać więcej tutaj о_формате.ps1xml

Można to sprawdzić, dzwoniąc pod numer telefonu

$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

Plik domyślny format rejestru (np.: C:\Windows\System32\WindowsPowerShell\v1.0\Registry.format.ps1xml) wyświetla właściwości w następujący sposób

$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

i, jak można zauważyć, jest wynikiem string[]

Aby uzyskać rzeczywistą wartość w powershell, należy wywołać metodę lub użyć Get-ItemProperty

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

W innych językach

Ta strona jest w innych językach

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