winget list
命令显示我的计算机中当前安装的应用程序列表,但它不会像控制面板那样按应用程序名称的字母顺序显示应用程序,
有没有办法使用
winget
按应用程序名称的字母顺序显示已安装的应用程序?
注意:两张图片来自不同的机器。
谢谢。
我想看看 winget 命令是否有一个参数/选项,并且真的想对 Trenly 的答案发表评论;我一直在使用类似的管道命令(只是更短),所以他仍然应该得到荣誉!
但是,显然,我必须有一定的声誉分数才能评论他(或任何其他)的答案......然而,我可以提供一个没有任何评级的答案;去搞清楚。所以,较短的版本,类似于他的答案,但没有不必要的嵌套管道:
winget 列表|对象排序
正如 Demetrius 在他的评论中提到的,目前客户端中没有内置排序功能。但是,在您的屏幕截图中,我看到您正在使用 PowerShell。您可以使用 PowerShell 变量和命令对输出进行有效排序。通过将几个命令链接在一起,可以重新创建表。这似乎对我有用 -
$a=winget list;$a|select -First 3;$a|select -Skip 3|Sort-Object|select -First 9
您可以在
这里查看
ConvertFrom-FixedColumnTable
函数,将winget list
的结果转换为表格。
我创建了一个函数
winget_list_OrderBy
以使其简单:
function winget_list_OrderBy {
<#
.EXAMPLE
winget_list_OrderBy
.EXAMPLE
winget_list_OrderBy -OrderBy 'Name' -Arguments "--id=Git.Git"
#>
[CmdletBinding()]
param (
[Parameter(ValueFromPipeline)]
[string[]]
$OrderBy = 'Name', # $OrderBy can be equal to 'Name'/'Id'/'Version'/'Source' (and 'Available' if exist).
[Parameter(ValueFromPipeline)]
[string[]]
$Arguments = ''
)
# Backup the original [Console]::OutputEncoding
$encoding = [Console]::OutputEncoding
# Make PowerShell interpret winget.exe's output as UTF-8
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new()
(winget list $Arguments) -match '^(\p{L}|-)' | # filter out progress-display lines
ConvertFrom-FixedColumnTable | # parse output into objects
Sort-Object $OrderBy | # sort by the ID property (column)
Format-Table # display the objects in tabular format
# Restore the original [Console]::OutputEncoding afterwards
[Console]::OutputEncoding = $encoding
}
用法很简单:
winget_list_OrderBy -OrderBy $OrderBy -Arguments $Arguments
或winget_list_OrderBy
。
对此有何想法?它可能需要一些清理,但我只是将结果转换为对象数组。
$apps = @("Microsoft Visual Studio Code", "Microsoft Visual Studio Code Insiders", "Visual Studio Community 2022")
$global:foundapps = [System.Collections.Generic.List[object]]::new()
foreach ($app in $apps) {
$Applist = winget search $app
$header = $Applist[1]
$nameposition = $header.indexof('Name')
$idPosition = $header.indexof('Id')
$versionPosition = $header.indexof('Version')
$sourceposition = $header.indexof('Source')
$name = $header.substring($nameposition, $idPosition).replace(' ', '')
$id = $header.substring($idPosition, ($versionPosition - $idPosition)).replace(' ', '')
$iVersiond = $header.substring($versionPosition, ($sourceposition - $versionPosition)).replace(' ', '')
$source = $header.substring($sourceposition, ($header.length - $sourceposition)).replace(' ', '')
$appstoadd = $Applist | select-object -skip 3
foreach ($AppToAdd in $appstoadd) {
$foundapps.Add([PSCustomObject] @{
"Name" = $AppToAdd.substring($nameposition, $idPosition).replace(' ', '')
"Version" = $AppToAdd.substring($versionPosition, ($sourceposition - $versionPosition)).replace(' ', '')
"ID" = $AppToAdd.substring($idPosition, ($versionPosition - $idPosition)).replace(' ', '')
"Source" = $AppToAdd.substring($sourceposition, ($header.length - $sourceposition)).replace(' ', '')
})
}
}
$foundapps |fl
在命令提示符下尝试:
winget list | sort