gpt4 book ai didi

powershell - 文件外仅显示最后一行

转载 作者:行者123 更新时间:2023-12-03 01:10:17 25 4
gpt4 key购买 nike

我正在尝试o将netstat输出输入到out文件中。该脚本在没有Out-File的情况下运行良好,我在控制台上看到了所有内容。但是,当我确实使用Out-File时,我仅看到最后一行。

$ComputerName = Read-Host -Prompt 'Please Input Computer Name'
$cmd = netstat -nao | Select-String "ESTA"
foreach ($element in $cmd) {
$data = $element -split ' ' | where {$_ -ne ''}
New-Object -TypeName PSObject -Property @{
'Local IP : Port#' = $data[1];
'Remote IP : Port#' = $data[2];
'Process ID' = $data[4];
'Process Name' = ((Get-Process | where {$_.ID -eq $data[4]})).Name
'Process File Path' = ((Get-Process | where {$_.ID -eq $data[4]})).Path
'Process Start Time' = ((Get-Process | where {$_.ID -eq $data[4]})).StartTime
#'Process File Version' = ((Get-Process | where {$_.ID -eq $data[4]})).FileVersion
'Associated DLLs and File Path' = ((Get-Process | where {$_.ID -eq $data[4]})).Modules |
select @{Name='Module';Expression={$_.Filename -join '; '}} |
Out-File -FilePath c:\temp\net.txt
}
}

最佳答案

您的Out-File放在错误的位置。您只将应分配给属性Associated DLLs and File Path的值写入输出文件,并在每次循环迭代时覆盖该文件。

一种简单的解决方案是将Out-File放在New-Object之后(而不是像现在那样位于属性哈希表之内),并添加参数-Append,就像@Esperento57在他的答案中所示。

我个人更希望将foreach更改为ForEach-Object,因此,您可以将所有内容都放在一个管道中,并且可以在最后输出而不必附加循环。您可能还希望避免为多个属性重复枚举过程。

netstat -nao | Select-String 'ESTA' -SimpleMatch | ForEach-Object {
$data = $_ -split '\s+'
$proc = Get-Process -Id $data[4]
New-Object -Type PSObject -Property @{
'Local IP : Port#' = $data[1];
'Remote IP : Port#' = $data[2];
'Process ID' = $data[4];
'Process Name' = $proc.Name
'Process File Path' = $proc.Path
'Process Start Time' = $proc.StartTime
#'Process File Version' = $proc.FileVersion
'Associated DLLs and File Path' = $proc.Modules |
Select-Ojbect @{Name='Module';Expression={$_.Filename -join ';'}}
}
} | Set-Content 'C:\temp\net.txt'

关于powershell - 文件外仅显示最后一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40368030/

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