Странное поведение Get-Item - PullRequest
0 голосов
/ 31 мая 2018

Если я просто сделаю

Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE"

, я получу это на консоли

NAME
----
@microsoft.com/GENUINE

Однако, этот

$test = Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE"
Write-Host "$($test.name)"

возвращает полный путь, а не тольконазвание ключа.

Это ошибка?Намеренное поведение?Я что-то делаю неправильно?

1 Ответ

0 голосов
/ 31 мая 2018

Это ошибка?Намеренное поведение?Я что-то делаю неправильно?

Средний.

Файлы форматирования PowerShell (* .format.ps1xml, расположенный в каталоге, определенном по умолчанию в $pshome), объясняют разницу здесь.В выходном сценарии по умолчанию PowerShell проверяет известные определения форматирования, которые загружаются из вышеупомянутых файлов, для заданных типов объектов.Если он присутствует, он будет использовать те, которые определяют, какие данные и как эти данные выводятся.

Итак, в вашем случае у вас есть Microsoft.Win32.RegistryKey объектов.Определения формата для этого хранятся в registry.format.ps1xml.Просто покажу усеченный раздел этого файла, чтобы вы могли увидеть, как создается ваш лучший пример.

 .... output truncated ....
 <TableControl>
                <TableHeaders>
                   <TableColumnHeader>
                        <Width>30</Width>
                        <Label>Name</Label>
                    </TableColumnHeader>
                    <TableColumnHeader>
                      <Label>Property</Label>
                    </TableColumnHeader>
                </TableHeaders>
                <TableRowEntries>
                    <TableRowEntry>
                      <Wrap/>
                        <TableColumnItems>
                            <TableColumnItem>
                                <PropertyName>PSChildName</PropertyName>
.... output truncated ....

Таким образом, это определяет выходную таблицу с 2 столбцами: имя, свойство.Столбец name на самом деле является свойством объекта pschildname.Это отдельно от фактического имени свойства объекта.Вот почему вы получаете разницу, которую видите выше.

Есть и другие примеры этого заблуждения и в мире PS.Чем больше ты знаешь.


Ресурс перехода к форматированию файлов будет about_format.ps1xml .Если у вас есть проблемы с форматированием по умолчанию и вы не удовлетворены простым Select-Object, то вы можете создать свой собственный из копий.


FWIW вы могли бы найти оба свойства, просто выполнив что-то вроде

Get-Item "HKLM:\SOFTWARE\MozillaPlugins\@microsoft.com/GENUINE" |  Format-List *

Это привело бы к отображению всех свойств, и вы бы увидели name и pschildname.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...