Сценарий Powershell - найдите список с путем защищенных паролем файлов .xlsx и .xls в сетевой папке - PullRequest
0 голосов
/ 23 января 2020

В настоящее время я работаю над поиском способа получения списка с путем ко всем файлам .xlsx и .xls, которые защищены паролем на сетевом диске, который содержит тонны и тонны папок и подпапок. Ниже я собрал этот скрипт, который работает нормально, но он возвращает только файлы .xlsx , ни один из файлов .xls с паролем не был возвращен. Мне интересно, если кто-нибудь знает, как получить файл .xls с паролем или любой другой скрипт, который бы сделал эту работу? Цените всю вашу помощь!

Скрипт

$path = "C:\Users\DC\Desktop"
$dest = "C:\Users\DC\Desktop\ExcelWithPassword.txt"
$Full = Get-ChildItem $path -Include *.xlsx*, *.xls* -Recurse -ErrorAction SilentlyContinue
$List = select-string -pattern "<encryption" $Full 
foreach ($file in $List) {
    $file.path | Out-File $dest -Append -Force
} 

Вывод в основном представляет собой список путей, в которых находятся эти защищенные паролем файлы.

1 Ответ

0 голосов
/ 24 января 2020

, если в целевом дереве каталогов нет других файлов с расширением ' .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"

Исходя из того, что вы хотите, есть несколько других соображений, которые вы должны иметь. Сканирование и выполнение этого по всей сети и тысячам файлов требует планирования и параллельной обработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...