PowershellsearchExcel正则expression式

我正在尝试使用正则expression式search包含许多MS Excel文件的目录,同时保持性能。

我有一个脚本,将做到这一点,感谢罗伯特·图斯和迈克尔索伦斯 ,只有它似乎忽略没有标题的列。 我曾考虑过使用$ WorkSheet.UsedRange作为限制search的尝试,但遇到大型工作表时似乎有相当的性能。

有另一种方法吗?

Set-Location $SearchPath ForFiles /s /m "*.*" /c "cmd /c echo @PATH" 2> $null | Where-Object {$_ -ne ""} | ForEach-Object { $Path = $_.replace("`"","") 

 if ($Path -match "\.xls.?$") { function Import-Excel([string]$FilePath, [string]$SheetName = "") { $csvFile = Join-Path $env:temp ("{0}.csv" -f (Get-Item -path $FilePath).BaseName) if (Test-Path -path $csvFile) { Remove-Item -path $csvFile } $xlCSVType = 6 $excelObject = New-Object -ComObject Excel.Application $excelObject.Visible = $false $excelObject.DisplayAlerts = $false $workbookObject = $excelObject.Workbooks.Open($FilePath,$null,$true) SetActiveSheet $workbookObject $SheetName | Out-Null $workbookObject.SaveAs($csvFile,$xlCSVType) $workbookObject.Saved = $true $workbookObject.Close() # cleanup [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbookObject) | Out-Null $excelObject.Quit() [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excelObject) | Out-Null [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() # now import and return the data Import-Csv -path $csvFile -WarningAction SilentlyContinue } function FindSheet([Object]$workbook, [string]$name) { $sheetNumber = 0 for ($i=1; $i -le $workbook.Sheets.Count; $i++) { if ($name -eq $workbook.Sheets.Item($i).Name) { $sheetNumber = $i; break } } return $sheetNumber } function SetActiveSheet([Object]$workbook, [string]$name) { if (!$name) { return } $sheetNumber = FindSheet $workbook $name if ($sheetNumber -gt 0) { $workbook.Worksheets.Item($sheetNumber).Activate() } return ($sheetNumber -gt 0) } $matches=$null $Excel = Import-Excel -FilePath $Path Write-Host "Searching: $Path" -ForegroundColor Yellow $Line = $null foreach ($Line in $Excel){ $matches=$null $Line -match $Regex > null try { if ($matches[$capturegroup].length -gt 0){ Write-Host "`nFound match: "$matches[$capturegroup] -ForegroundColor green Write-Host "Matching Column and Value: "$Line "`n" -ForegroundColor green $Props = @{ Path = $Path Line = $Line Matches = $matches[$capturegroup] } $OBJ = New-Object -TypeName psobject -Property $Props $OBJ | Select-Object Path,Matches,Line | Export-Csv -Path $CSV -Append -NoTypeInformation } } catch { } } }