В этом вопросе показан сценарий Powershell для создания списка открытых окон проводника и их пути. Моя цель - захватить открытый в настоящее время набор окон обозревателя и записать файл CMD с такими командами, как: C: \ WINDOWS \ explorer.exe / e, "C: \ open \ this \ folder"
Поэтому я хотел бы иметь полный путь и имя папки в обычной записи пути. Вот что отображается в заголовке окна Проводника Windows: «C: \ open \ this \ Favorite folder»
Предлагаемый код:
function Get-WindowTitle($handle) {
Get-Process |
Where-Object { $_.MainWindowHandle -eq $handle } |
Select-Object -Expand MainWindowTitle
}
$app = New-Object -COM 'Shell.Application'
$app.Windows() |
Select-Object LocationURL, @{n='Title';e={Get-WindowTitle $_.HWND}}
Как показано выше, LocationURL предоставляетполный путь в стиле escape-URL:
file:///C:/open/this/Favorite%20%folder"
Компонент @ {n = 'Title'; e = {Get-WindowTitle $ _. HWND}} создает столбец "Title", который усекается до5 символов:
C:\...
Полный вывод для одного окна проводника выглядит следующим образом:
LocationURL Title
----------- -----
file:///C:/open/this/Favorite%20%folder C:...
Я обнаружил, что могу избежать усечения, заполнив строку 'Title' многими пробелами. Ширина этой строки, кажется, определяет максимальную ширину вывода. Тем не менее, я наблюдаю, что только около 60% открытых окон проводника указывают путь. Остальные - просто пустая строка.
Я попытался "$ app.Windows () | Select-Object LocationName", но вывод содержит только только имя папки Explorer, но не полный путь и папку, отображаемую в заголовке Explorer.
Еще одна загадка - почему скрипт работает так медленно. Если у меня открыто 10 окон обозревателя, сценарий запускается в течение 30 секунд, что занимает около 3 секунд на путь.
Для этого скрипта:
function Get-WindowTitle($handle) {
Get-Process |
Where-Object { $_.MainWindowHandle -eq $handle } |
Select-Object -Expand MainWindowTitle
}
$app = New-Object -COM 'Shell.Application'
$app.Windows() |
Select-Object LocationName,@{n=' ------------Title---------------- ';e={Get-WindowTitle $_.HWND}}
Это вывод (с некоторыми изменениями с *** для конфиденциальности)
PS C:\E***> .\OpenExplorer.ps1
LocationName ------------Title----------------
------------ ----------------------------------------------------------------------------------
2019-07
Ame****
2019 Priv...
2019-10-3... C:\E\Event Presentations\2019-10-31 Priv**********bcast
E C:\E
5G Brief ... C:\E\Tech************ing\5G Brief (2018)
36 Series...
2019 DE* ... C:\E\16*****N\2019 DE*******************
Newsletters C:\E\Newsletters
Reports C:\E\Tech************ing\Reports
2019-10-2... C:\E\16**********s\2019-10-29 *********************
2019-11 C:\Data\Docs\Stand*********24\2019-11
UB****
Financial... C:\E\Financ************
Expenses C:\E\Internal\Expenses
E C:\E
E***