我有一个 JSON 文件,其中一个数组作为值,我想对数组进行排序。
测试.json
{
"user_name" : "paul",
"cars" :
[
{
"name" : "BMW"
},
{
"name" : "VW"
},
{
"name" : "Audi"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的 powershell 命令
Get-Content .\test.json | ConvertFrom-Json | Sort-Object -Property @{expression={$_.cars.name};Descending=$true} | ConvertTo-Json
{
"user_name": "paul",
"cars": [
{
"name": "BMW"
},
{
"name": "VW"
},
{
"name": "Audi"
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何对数组“汽车”进行排序以获得正确的顺序“奥迪”、“宝马”、“大众”?
我在about_Pipelines 上阅读了有关管道在 PowerShell 中的工作原理的信息,并了解到管道一次传送一个对象。
所以这
Get-Service | Format-Table -Property Name, DependentServices
Run Code Online (Sandbox Code Playgroud)
与此不同
Format-Table -InputObject (Get-Service) -Property Name, DependentServices
Run Code Online (Sandbox Code Playgroud)
所以在这里,按照解释,在第一种情况下,一次Format-Table在一个对象上工作,在第二个例子中,Format-Table工作在一个对象数组上。如果我错了,请纠正我。
如果是这种情况,那么我想知道Sort-Object需要处理数据集合的其他 cmdlet 是如何使用管道字符的。
当我做 :
Get-Service | Sort-Object
Run Code Online (Sandbox Code Playgroud)
Sort-Object如果它一次只处理一个对象,它如何能够排序。因此,假设有 100 个服务对象要传递给Sort-Object。会Sort-Object被调用 100 次(每次调用一个对象)?而且,这将如何产生我在屏幕上看到的排序结果。
我想对.txt文档进行排序,以便第一行保持在顶部,其余的按数字排序.
我目前有以下内容,但它删除了第一行,并且排序不正确,因为数字是例如72,2,51,100,201,5等等所以它将其分类为100,2,201, 5,51,72.
我希望它分类为2,5,51,72,100,201
$emptyLine = Get-Content C:\Path\Document.txt | Select-Object -Skip 1
$emptyLine | Sort-Object | Out-File C:\Path\Document.txt
Run Code Online (Sandbox Code Playgroud)
我知道这在Notepad ++中是可行的,但是不允许需要进行排序的机器安装任何新的东西.
如果对于任何解决方案,我都非常开放,这不需要我安装新的软件.
该机器是Windows 10 Pro x64.
No Tool_Name Tool_Part
72 10 1 9. 1
43 36 3 29. 1
102 34 1 1.7 1
600 33 1 3. 1
76 3 1 5.3 1
75 3 1 5.5 1
251 2 3 3. 1
73 10 1 5.3 1
50 36 3 15.9 1
64 2 1 6. …Run Code Online (Sandbox Code Playgroud)我们目前有以下文件夹结构:
C:\Packages\Adobe\DC\9.2.2
C:\Packages\Adobe\DC\10.0.3
C:\Packages\Adobe\DC\10.0.8
C:\Packages\Microsoft\Edge\6.1.10
C:\Packages\Microsoft\Edge\6.1.18
C:\Packages\Microsoft\Edge\6.1.20
Run Code Online (Sandbox Code Playgroud)
使用 PowerShell 脚本,我尝试仅保留相应应用程序文件夹的最高版本并删除所有其他文件夹。结果应该是:
C:\Packages\Adobe\DC\10.0.8
C:\Packages\Microsoft\Edge\6.1.20
Run Code Online (Sandbox Code Playgroud)
但是,排序在我的脚本中似乎无法正常工作。
$folders_root = Get-ChildItem -Path C:\Packages -Directory
foreach ($folder in $folders_root)
{
$folders_appilcation = Get-ChildItem $folder.FullName -Directory
foreach ($app_folder in $folders_appilcation)
{
$versionfolder = Get-ChildItem $app_folder.FullName -Directory | Sort-Object -Descending | Select-Object -Skip 1 | % {Write-host "Deleting $($_.FullName)"<#; Remove-Item $_.FullName#>}
}
}
Run Code Online (Sandbox Code Playgroud)
对于路径“C:\Packages\Adobe\DC”,9.2.2 被认为是最高版本(根据脚本),但它应该是 10.0.8。
Deleting C:\Packages\Adobe\DC\10.0.8
Deleting C:\Packages\Adobe\DC\10.0.3
Deleting C:\Packages\Microsoft\Edge\6.1.18
Deleting C:\Packages\Microsoft\Edge\6.1.10
Run Code Online (Sandbox Code Playgroud)
有人能告诉我我做错了什么吗?