我在PowerShell脚本中有ForEach循环,该脚本试图遍历在过去2小时内在文件夹中创建的每个文件。它将占用每个文件,删除某些列和行,并且只留下一个包含ActiveFaults标题的列。然后它将进行排序/分组和格式化,并为每个文件提供一串ActiveFaults。
我的脚本的输出是我需要的,但它需要花费很多时间来处理。有没有更有效的方法来做到这一点?此外,它偶尔会给我一个错误,说“该对象不包含Workbooks.Open()方法”......有关为什么会这样做的任何想法?为什么这个问题会断断续续?提前谢谢。
$PathMX1005 = "\source"
filesMX1005 = Get-ChildItem $PathMX1005 -recurse -include *1Hz*.csv | Where { $_.CreationTime -ge [datetime]::Now.AddMinutes(-180) }
Copy-Item $filesMX1005 \destination -Recurse
$files2MX1005 = Get-ChildItem \destination -Recurse
foreach($file in $files2MX1005) {
$Excel = New-Object -ComObject excel.application
$Excel.visible = $false
$Workbook = $Excel.Workbooks.open($file.FullName)
$range = $Workbook.ActiveSheet.Range("A1:FZ1").EntireColumn
$range2 = $Workbook.ActiveSheet.Range("A1:A34").EntireRow
$range.Delete()
$range2.Delete()
$Excel.DisplayAlerts=$False
$Workbook.SaveAs("c:\StrippedHeader.csv")
$FaultsMX1005 = Import-CSV ":\StrippedHeader.csv" | Group-Object ActiveFaults | foreach-object { $_.group | select -last 1} | Out-String
$Excel.Workbooks.Close()
$Excel.Quit()