在PowerShell中添加get-content命令的结果

xxhby3vn  于 2023-04-30  发布在  Shell
关注(0)|答案(1)|浏览(107)

我在\log中有很多文件,在这些文件中,每次某台计算机上的CPU达到阈值时,都有一行。
每个文件都以计算机命名,并且每个文件都有包含数字5的若干行。
现在,我的脚本会计算每个文件中有多少行,输出如下:

Computer name - PC000018.txt
2
............................
Computer name - PC000019.txt
1
............................

但是否可以将它们相加或相乘呢?
就像PC000018。txt有这样三行:

5
5
5

则输出文件将显示:

Computer name - PC000018.txt
15 
............................
Computer name - PC000019.txt
1
............................

这是现在的脚本:

Get-ChildItem 'C:\temp\log\' | ForEach-Object {
  @'
Computer name - {0}
{1}
............................
'@ -f $_, (Get-Content $_.FullName -ReadCount 10).Length
} | Out-File 'C:\temp\output.txt'

enter image description here
我可以计算行数,但希望输出时使用 * 5。如果有三行是5,那么输出将是15。

e0uiprwp

e0uiprwp1#

你是说要做下面这样的事情吗?

$template = @'
Computer name - {0}
{1}
............................
'@

Get-ChildItem -Path 'C:\temp\log' -Filter 'PC*.txt' -File | ForEach-Object {
    $value = @($_ | Get-Content | Where-Object { $_ -eq '5' }).Count * 5
    $template -f $_.BaseName, $value
} | Set-Content -Path 'C:\temp\output.txt'

但是...为什么不创建一个CSV文件,这样你就可以在Excel中打开

Get-ChildItem -Path 'C:\temp\log' -Filter 'PC*.txt' -File | ForEach-Object {
    [PsCustomObject]@{
        ComputerName = $_.BaseName
        Threshold    = @($_ | Get-Content | Where-Object { $_ -eq '5' }).Count * 5
    }
} | Export-Csv -Path 'C:\temp\output.csv' -NoTypeInformation -UseCulture

相关问题