我使用以下命令在C:\tmp
中生成一个日志文件,命名约定为computername_yearmmddhhmm.txt
/xagt.exe -g "C:\tmp\xagt_${env:COMPUTERNAME}_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
字符串
要使用PowerShell读取此文件的输出,我使用下面随附的代码,要获取日志文件的最后20行,我使用下面的代码
$Fireeyefilename = Get-Item $filename*.txt
Write-Output ("FireEye Connection Status");
Write-Host "-------------------------------------------------------------------------------------------------------"
$foreeyeconnection = Get-Content $Fireeyefilename[$Fireeyefilename.count – 1] -Tail 20 | select-string "m=TCPConnect";
Write-Output ("$($Fireeyefilename[$Fireeyefilename.count – 1])");
Write-Output ("$foreeyeconnection");
型
如上所示,我将部分文件名保存在变量$filename
中,然后将使用命名约定xagt_hostname_*
创建的所有日志文件存储在变量$Fireeyefilename
中,然后使用Get-Content
读取该文件的内容。
问题是有时变量($Fireeyefilename
)包含一个这样的日志文件
PS C:\Program Files (x86)\FireEye\xagt> $Fireeyefilename
Directory: C:\tmp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 13/07/2023 10:58 8416798 xagt_computername_20230713_105844.txt
PS C:\Program Files (x86)\FireEye\xagt> $Fireeyefilename.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True FileInfo System.IO.FileSystemInfo
型
并且$Fireeyefilename
变量类型变为System.IO.FileSystemInfo
有时候$Fireeyefilename
变量有多个日志文件,变量类型会变成一个系统数组,如:
PS C:\Program Files (x86)\FireEye\xagt> $Fireeyefilename.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\Program Files (x86)\FireEye\xagt> $Fireeyefilename
Directory: C:\tmp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 13/07/2023 10:58 8416798 xagt_computername_20230713_105844.txt
-a---- 13/07/2023 11:03 8428108 xagt_computername_20230713_110307.txt
-a---- 13/07/2023 11:03 8428108 xagt_computername_20230713_110337.txt
型
我需要读取我生成的最后一个日志文件,换句话说,文件最近的“LastWriteTime”,所以我使用以下代码:
Get-Content $Fireeyefilename[$Fireeyefilename.count – 1] -Tail 20 | select-string "m=TCPConnect";
型
正如我前面提到的,当变量$Fireeyefilename
有一个单一的文件名,它的类型是system.IO.FileSystemInfo
,它将没有Count
属性,但代码工作,当变量$Fireeyefilename
类型是System.Array
,我得到了最后一个文件使用
Get-Content $Fireeyefilename[$Fireeyefilename.count – 1] -Tail 20 | select-string "m=TCPConnect";
型
有时候我无法获得使用以下代码生成的最后一个日志文件:
Get-Content $Fireeyefilename[$Fireeyefilename.count – 1]
型
那么是否有一个mmethod来获取系统数组变量Last$Fireeyefilename
中包含LastWriteTime的最后一个日志文件
考虑到我应该在C:\tmp
位置生成此文件,为什么有同名的日志文件,因为很多用户必须在同一位置生成此文件,是否有增强代码的建议,请让我知道
1条答案
按热度按时间kuarbcqp1#
您可以使用
@(...)
数组子表达式运算符强制PowerShell将单项输出视为数组:字符串