Выбор элементов из вложенных объектов

#powershell

Вопрос:

Я пытаюсь получить имя пользователя из Get-AppxPackage. К сожалению, это свойство вложено довольно глубоко. В моей голове это было бы что-то вроде этого (но это не работает):

 Get-AppxPackage -Allusers | select $_.PackageUserInformation.UserSecurityID.Username | where-object {$_.PackageUserInformation.UserSecurityID.UserName -notlike "defaultuser*"}
 

В имени пользователя может быть либо 1, либо 2 элемента, в зависимости от упаковки. Если есть 2 элемента, я хочу поместить тот, который не похож на » defaultuser*», в переменную в виде строки.

 Running Get-AppxPackage -Allusers | where-object {$_.PackageUserInformation.UserSecurityID.UserName -like "defaultuser*"} 
 

Следует вернуть некоторые примеры пакетов с несколькими элементами имени пользователя, встроенными в Windows 10.

Комментарии:

1. Итак, вы просто хотите вернуть только одно имя пользователя?

Ответ №1:

Сначала отфильтруйте свой объект, затем выберите и выведите результат — вы можете выбрать «вложенные» свойства, используя вычисляемую структуру свойств:

 $PackagesAndUsers = Get-AppxPackage -Allusers | Where-Object { $_.PackageUserInformation.UserSecurityID.UserName -notlike "defaultuser*"} | Select Name, @{N='UserName';E={$_.PackageUserInformation.UserSecurityID.UserName}}
 

Теперь у вас есть все пакеты и пользователи в одном объекте, который исключает defaultuser*
Из $PackagesAndUsers — вы можете выбрать все, что вам нравится, из этого, чтобы заполнить свою строку.

Имейте в виду, что в поле Имя пользователя все еще может быть несколько пользователей, если на вашем компьютере несколько пользователей