如何从Get-AppxPackage返回对象的嵌套子属性中提取用户名?
PowerShell 获取AppxPackage非defaultuser用户名解决方案
原写法错误原因
你原有写法中Select $_.PackageUserInformation.UserSecurityID.Username逻辑无效:Select-Object默认接收属性名作为参数,管道传递到该命令时$_尚未绑定到当前对象,最终会返回全量属性,不会提取到嵌套的用户名属性。
适配需求的正确写法
需求场景:提取所有不匹配defaultuser*规则的用户名存入变量
不管单个应用包对应1个还是2个用户名,以下命令会自动遍历所有用户名、过滤符合要求的结果存入变量:
$validUsernames = Get-AppxPackage -AllUsers | ForEach-Object { # 遍历当前包所有用户名,过滤排除defaultuser前缀的项 $_.PackageUserInformation.UserSecurityID.UserName | Where-Object { $_ -notlike "defaultuser*" } }
如果需要对结果去重,可以在末尾加| Select-Object -Unique:
$validUsernames = Get-AppxPackage -AllUsers | ForEach-Object { $_.PackageUserInformation.UserSecurityID.UserName | Where-Object { $_ -notlike "defaultuser*" } } | Select-Object -Unique
扩展场景:保留应用包信息同时关联有效用户名
如果需要同时获取应用包名称、发布者等信息和对应的非defaultuser用户名,可使用计算属性实现:
$appWithValidUser = Get-AppxPackage -AllUsers | Select-Object Name, Publisher, @{ Name = "ValidUsername" Expression = { $_.PackageUserInformation.UserSecurityID.UserName | Where-Object { $_ -notlike "defaultuser*" } } } | Where-Object ValidUsername # 过滤掉没有有效用户名的条目
内容的提问来源于stack exchange,提问作者Pete Mitchell
相关产品推荐
相关产品推荐

