, если в целевом дереве каталогов нет других файлов с расширением ' .xl . Почему вы делаете это ...
Get-ChildItem $path -Include *.xlsx*, *.xls* -Recurse -ErrorAction SilentlyContinue
... вам нужно только это ...
Get-ChildItem $path -Include *.xl* -Recurse -ErrorAction SilentlyContinue
Если вы только что прошли полный путь, попросите его, используя это ...
Get-ChildItem $path -Include *.xl* -Recurse -ErrorAction SilentlyContinue |
Select-Object -Property Fullname
# Results
<#
FullName
--------
D:\Temp\NewFolder\Test.xlsx
D:\Temp\Test.xls
D:\Temp\Test.xlsx
#>
... или это.
(Get-ChildItem $path -Include *.xl* -Recurse -ErrorAction SilentlyContinue).FullName
# Results
<#
D:\Temp\NewFolder\Test.xlsx
D:\Temp\Test.xls
D:\Temp\Test.xlsx
#>
Что касается l oop, вы также можете сократить свой код до чего-то подобного.
(Get-ChildItem $path -Include *.xl* -Recurse -ErrorAction SilentlyContinue |
Select-Object -Property Fullname) -match '<encryption' |
Out-File $dest -Append -Force
Или
(Get-ChildItem $path -Include *.xl* -Recurse -ErrorAction SilentlyContinue).FullName -match '<encryption' |
Out-File $dest -Append -Force
Вы не говорите, как файлы были зашифрованы. Excel позволяет защитить лист, рабочую книгу и т. Д. c. Вы не можете проверить защищенный паролем файл, выполнив поиск строки, не открывая файл. Чтобы открыть файл, вы должны использовать интерфейс приложения, чтобы открыть файл. Для Excel это:
### Automate Excel
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $true
$workbook1 = $excel.Workbooks.Add()
$Sheet = $Excel.WorkSheets.Item(1)
$Sheet.Cells.Item(1,1) = "Hello from Powershell "
$Sheet.Cells.Item(1,2) = "Using VBA from Excel Button object"
Исходя из того, что вы хотите, есть несколько других соображений, которые вы должны иметь. Сканирование и выполнение этого по всей сети и тысячам файлов требует планирования и параллельной обработки.