不能对空值表达式调用方法.Powershell脚本



实际上我想从日志文件中提取值并将其保存在csv文件中

这是日志文件

开始时间:1990年5月17日星期五10:38:27
来源:A:\Live
Dest:X:\Copy\Dest\
文件:*
选项:/COPY:DAT/R:100000/W:3
新目录:3 W:\Live
新建文件:100.0 m randomfile.100M.xyz0.0%

列表项

0.0%
0.0%
,,,
,,、,
100%

Total      Remaining      copied       Extracted

光盘:1 1 0 0
文件:3 3 0 0
名称:300.00 m 300.00 m 0 0
时间:0:00:47 0:00:46 0:00:00 0:00:00

速度:1224242字节/秒。速度:3233.5920兆字节/分钟。

结束时间:1990年5月11日上午11:39:15

我想获得以下格式的

开始,来源,目的地,速度,结束

1990年5月17日10时38分27秒,A:\Live,X:\Copy\Dest,1224242字节/秒,3233.5920兆字节/分钟,5月11时39分15秒19

但我得到的输出如下:

"已启动"Source"Dest"结束""速度";

,"&"2013年3月17日星期三"W";

"c">">/COPY"\测试";

,,,,
,,,
;1 1 0 0 0"3 3 0 0 0 0";"300.00 m 300.00 m 0 0 0〃"0"6703735字节/秒&"383.590兆字节/分钟&"tue May 11 39";

程序

Param($textlogfile = "Path")   
$collection=@() 

###trim the white spaces lines from the structured text###

$content = (gc $textlogfile ) | ? {$_.trim() -ne "" }   
for($i=0;$i -lt $content.length;$i=$i+5)   
{  
$Started = $content[$i]  
$started = $Started -split ":" |Select-Object -Index 1 |ForEach-Object Trim     
$Source = $content[$i+1]  
$Source = $Source -split ":" |Select-Object -Index 1 |ForEach-Object Trim  
$Dest = $content[$i+2]  
$Dest = $Dest -split ":" |Select-Object -Index 1 |ForEach-Object Trim  
$Ended = $content[$i+3]  
$Ended = $Ended -split ":" |Select-Object -Index 1 |ForEach-Object Trim  
$Speed = $content[$i+4]  
$Speed = $Speed -split ":" |Select-Object -Index 1 |ForEach-Object Trim  
$coll = "" | select Started,Source,Dest,Ended,Speed  
$coll.Started = $Started  
$coll.Source = $Source  
$coll.Dest = $Dest  
$coll.Ended = $Ended  
$coll.Speed = $Speed  
$collection +=$coll   
}  
$collection | export-csv Path -notypeinformation 

你能帮我做你想要的手术吗请帮助我,因为我是新使用powershell

PowerShell正试图对以下表达式的结果调用Trim()(":")[1],认为它是-split操作的右侧操作数。

将整条线路更改为:

$Ended = $Ended -split ":" |Select-Object -Index 1 |ForEach-Object Trim

这样,如果$Ended没有任何:的(您最终只使用$null(,就不会发生错误

最新更新