Performance 我的PowerShell脚本是否因为计算属性而变慢?

Performance 我的PowerShell脚本是否因为计算属性而变慢?,performance,powershell,Performance,Powershell,我对PowerShell还相当陌生,但当我只需要一些自动化而不需要突破IDE或代码编辑器+编译器时,我发现它很有用。我有一个脚本,它将列出文件,通过自定义函数运行它,然后选择要导出到CSV的特定属性 ls .\mydir | Convert-ToMyObject | select -Property IdKey, Timestamp ` | Export-Csv ".\list.csv" 请注意,Timestamp是一个[datetime]对象 该脚本大约需要20-30分钟来解析约45

我对PowerShell还相当陌生,但当我只需要一些自动化而不需要突破IDE或代码编辑器+编译器时,我发现它很有用。我有一个脚本,它将列出文件,通过自定义函数运行它,然后选择要导出到CSV的特定属性

ls .\mydir | Convert-ToMyObject | select -Property IdKey, Timestamp `
  | Export-Csv ".\list.csv"
  • 请注意,
    Timestamp
    是一个
    [datetime]
    对象
该脚本大约需要20-30分钟来解析约45K个文件

但是,只要我按如下所示更改它,它就需要很长很长的时间来处理(在这一点上,它已经花了大约2个小时,只完成了约25K个文件)


我不知道这是什么原因(我的谷歌fu不够强大),希望有人能帮助启发我。这是由于计算属性造成的吗?或者调用来获取datetime组件?或者两者都有?

计算属性的语法错误。表达式中缺少管道对象(
$
)。比较一下:

gci | select -Property @{Name="year";Expression={LastWriteTime.Year}}
为此:

gci | select -Property @{Name="year";Expression={$_.LastWriteTime.Year}}
第一个版本运行非常慢(每个文件大约100毫秒),并且根本不产生有用的输出。第二个很快

将代码更改为:

select -Property IdKey, @{Name="year";Expression={$_.Timestamp.Year}}, `
@{Name="month";Expression={$_.Timestamp.Month}}, @{Name="day";Expression={$_.Timestamp.Day}}, `
@{Name="hour";Expression={$_.Timestamp.Hour}}, @{Name="minute";Expression={$_.Timestamp.Minute}}, `
@{Name="second";Expression={$_.Timestamp.Second}}, @{Name="millisecond";Expression={$_.Timestamp.Millisecond}}

可能问题出在
Convert ToMyObject
中,而不是这部分代码中。你能在这里发布Convert ToMyObject吗?谢谢@BaconBits,我刚刚发现了困难的方法。运行几个小时后,它产生了您所描述的内容;datetime组件在输出中都为空。我一添加管道对象,一切都很好。自我提醒-如果它运行缓慢,最好首先确保它是正确的。
select -Property IdKey, @{Name="year";Expression={$_.Timestamp.Year}}, `
@{Name="month";Expression={$_.Timestamp.Month}}, @{Name="day";Expression={$_.Timestamp.Day}}, `
@{Name="hour";Expression={$_.Timestamp.Hour}}, @{Name="minute";Expression={$_.Timestamp.Minute}}, `
@{Name="second";Expression={$_.Timestamp.Second}}, @{Name="millisecond";Expression={$_.Timestamp.Millisecond}}