Nea*_*ers 3 sorting powershell grouping counting
是否有任何酷的cmdlet可以帮助我做以下事情?我想要Powershell中的东西就像在SQL中做同样简单:
select RootElementName , count(*) from Table
group by RootElementName
order by RootElementName
Run Code Online (Sandbox Code Playgroud)
我是目录中的所有XML文件,找到每个XML文件的根元素.
$DirectoryName = "d:\MyFolder\"
$AllFiles = Get-ChildItem $DirectoryName -Force
foreach ($Filename in $AllFiles)
{
$FQFilename = $DirectoryName + $Filename
[xml]$xmlDoc = Get-Content $FQFilename
$rootElementName = $xmlDoc.SelectSingleNode("/*").Name;
Write-Host $FQFilename $rootElementName
}
Run Code Online (Sandbox Code Playgroud)
期望的结果:
RootName Count
-------- -----
Root1 15
MyRoot 16
SomeRoot 24
Run Code Online (Sandbox Code Playgroud)
我知道我可以创建两个数组,或者一个对象数组,将根元素存储在数组中,并使用典型代码完成所有计数,只是希望这种新语言可能有内置的东西,我没有'发现了.
我可以将"Write-Host $ FQFilename $ rootElementName"传递给与上面提到的SQL有关的东西吗?
这是一个解决方案.Group-Object
不会将对象写入我们可以排序或分组的管道.Write-Host
仅在屏幕上打印文本以向用户显示某些内容,例如.脚本菜单.
$AllFiles | Group-Object RootElementName | Sort-Object Name | Select-Object Name, Count
Run Code Online (Sandbox Code Playgroud)
我正在创建一个具有FileName属性和RootElementName的对象,因此如果需要检索列表的文件名+ rootelement,则可以使用它.如果没有,我们可以将其简化为:
$DirectoryName = "d:\MyFolder\"
$AllFiles = Get-ChildItem $DirectoryName -Force | ForEach-Object {
#The FullName-property contains the absolute path, so there's no need to join the filename and $directoryname
[xml]$xmlDoc = Get-Content $_.FullName
$rootElementName = $xmlDoc.SelectSingleNode("/*").Name
#Outputing an object that we can group and sort
New-Object -TypeName psobject -Property @{
FileName = $_.FullName
RootElementName = $rootElementName
}
}
$grped = $AllFiles | Group-Object RootElementName | Sort-Object Name | Select-Object Name, Count
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17309 次 |
最近记录: |