У меня есть цикл ForEach в сценарии PowerShell, который пытается пропустить каждый файл, который был создан в папке за последние 2 часа. Он будет принимать каждый файл, удалять определенные столбцы и строки и оставит только один столбец с заголовком ActiveFaults. Затем он сортирует/группирует и форматирует, и даст мне строку ActiveFault для каждого файла.Ручные рабочие листы в PowerShell ForEach loop
Результат моего сценария - это то, что мне нужно, но он занимает много времени для обработки. Есть ли более эффективный способ сделать это? Кроме того, время от времени, он дает мне ошибку, говоря, что «объект не содержит метод 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()
'$ files2MX1005' не фильтрует документы Excel, это моя первая проблема. Также нет необходимости продолжать ком-объект '$ Excel = New-Object -ComObject excel.application', чтобы он мог запускать эту строку один раз _outside_ в цикле. Это на самом деле просто файлы csv? нам не нужно использовать объект com для них. Я не вижу, что вы заполняете '$ FaultsMX1005', и вам не хватает закрывающей скобки из' ForEach' – Matt