我正在尝试从Get-AppxPackage获取用户名。不幸的是,该属性嵌套得很深。在我的脑海里,它会是这样的(但它不起作用):
Get-AppxPackage -Allusers | select $_.PackageUserInformation.UserSecurityID.Username | where-object {$_.PackageUserInformation.UserSecurityID.UserName -notlike "defaultuser*"}
在用户名中,可能有1个或2个项目,具体取决于软件包。如果有两个项目,我想把一个不像'defaultuser*'到一个变量作为一个字符串。
Running Get-AppxPackage -Allusers | where-object {$_.PackageUserInformation.UserSecurityID.UserName -like "defaultuser*"}
应该返回一些内置到Windows 10中的具有多个UserName项的示例包。
2条答案
按热度按时间of1yzvn41#
首先过滤对象,然后选择并输出结果-您可以使用计算的属性结构选择“嵌套”属性:
现在,所有的包和用户都在一个对象中,这个对象不包括
defaultuser*
From$PackagesAndUsers
-您可以从中选择任何您喜欢的内容来填充字符串。请记住,如果您的计算机上有多个用户,用户名字段中仍可能有多个用户
afdcj2ne2#
defaultuser
开头的用户名。Sort-Object -Unique
,以获得唯一的用户名结果集。注意
@(…)
,数组子表达式运算符的使用,它确保LHS是一个 array。使用 * 集合 *(例如数组)作为LHS,PowerShell比较运算符(例如
-notlike
)充当 * 过滤器 * 并返回匹配项的 * 数组 * 而不是布尔值-请参阅about_Comparison_Operators。因此,上面的代码只是从
$_.PackageUserInformation.UserSecurityID.Username
报告的(潜在的)用户名数组中 * 过滤掉 * 以defaultuser
开头的用户名至于你尝试了什么:
... | select $_.PackageUserInformation.UserSecurityID.Username
$_
只在 script blocks({ ... }
)中有意义地定义-参见this answer。Select-Object
(其内置别名为select
)提供属性 paths-请参阅this answer。