gpt4 book ai didi

powershell - 在 Get-ChildItem 等类别中显示输出

转载 作者:行者123 更新时间:2023-12-02 12:20:05 25 4
gpt4 key购买 nike

有谁知道如何在多次运行时显示 get-childitem 等函数的输出(数组管道输入)?我将尝试用一个例子来展示它。

PS C:\Users> ".\Graimer", ".\Public" | Get-ChildItem


Directory: C:\Users\Graimer


Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 20.12.2012 15:59 Contacts
d-r-- 06.01.2013 01:23 Desktop
d-r-- 02.01.2013 17:15 Documents
d-r-- 05.01.2013 16:38 Downloads
d-r-- 20.12.2012 15:59 Favorites
d-r-- 20.12.2012 15:59 Links
d-r-- 20.12.2012 15:59 Music
d-r-- 20.12.2012 15:59 Pictures
d-r-- 20.12.2012 15:59 Saved Games
d-r-- 20.12.2012 15:59 Searches
d-r-- 20.12.2012 15:59 Videos


Directory: C:\Users\Public


Mode LastWriteTime Length Name
---- ------------- ------ ----
d-r-- 20.12.2012 13:57 Documents
d-r-- 26.07.2012 10:13 Downloads
d-r-- 26.07.2012 10:13 Music
d-r-- 26.07.2012 10:13 Pictures
d-r-- 26.07.2012 10:13 Videos

在我的函数中,当我使用数组输入和处理 { } block 时,Write-output 将所有结果放入一个表中,就像它应该的那样。但我怎样才能将其格式化为这样呢?显示时按目录分隔,同时存储为标准对象数组?好像找不到这方面的文章。如果只能使用已编译的 cmdlet,那并不重要,无论如何,我只是在寻找一些线索:)

编辑:添加了我的代码。只需创建 psobject 并使用 Write-Object 来显示它们。

Function Get-RecurseFileCount
{
[CmdletBinding()]
Param
(
[Parameter(ValueFromPipeline=$true)]
[String[]]$Path = "."
)
Begin
{
}
Process
{
foreach ($rootpath in $Path)
{
Write-Verbose "Testing if path of rootdirectory exists"
if(Test-Path $rootpath)
{
Write-Verbose "Getting all recursive subfolders"
$folders = Get-ChildItem $rootpath -Recurse -ErrorAction SilentlyContinue | where {$_.PSIsContainer}

Write-Verbose "Starting to count files in rootfolder"
$folder = Get-Item $rootpath
$fcount = (Get-ChildItem $rootpath -ErrorAction SilentlyContinue | where {!$_.PSIsContainer}).Count
New-Object psobject -Property @{FolderName = $folder.Name; FolderPath = $folder.FullName; FileCount = $fcount} | Write-Output

Write-Verbose "Starting to count files in subfolders"
foreach($folder in $folders)
{
$fname = $folder.Name
$fpath = $folder.FullName
$fcount = (Get-ChildItem $fpath -ErrorAction SilentlyContinue | where {!$_.PSIsContainer}).Count
New-Object psobject -Property @{FolderName = $fname; FolderPath = $fpath; FileCount = $fcount} | Write-Output
}
Write-Verbose "Finished with filecount"
}
}
}
End
{
}
}

并且 Format-Table -GroupBy .. 不是答案。解决方案是添加一个名为 root = $rootpath 的属性,并添加一个按属性 root 分组的默认 View ,并将其隐藏在表中,这样就不会多次显示。问题只是..如何? :)

最佳答案

您必须在 format.ps1xml 文件中的 View 中提供 GroupBy 信息,并更新格式数据以获得所需的行为。编写 ps1xml 并将其加载到 session 中是不可避免的。

http://technet.microsoft.com/en-us/library/dd315396.aspx

关于powershell - 在 Get-ChildItem 等类别中显示输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14181798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com