简体   繁体   中英

Using Powershell to drive advanced search in Windows Explorer - How to pipe Out-GridView to Windows Explorer?

I have a folder on a remote computer containing security camera video footage. I want to only search the *.mp4 files for those that are created between 2300 and 0600. The code:

$root = "F:\ispy\video\SWVL"  
(Get-ChildItem -Path $root) | Where-Object {$_.lastWriteTime.TimeOfDay.Hours -gt 23 -or $_.LastWriteTime.TimeOfDay.Hours -lt 06} | ls | Out-GridView -PassThru 

Does this perfectly, and passes the output (file list) to a PowerShell gridview.... BUT, I need the out to show the files in Windows Explorer.

I'm essentially trying to use a PowerShell script as an advanced search filter.

Hoping someone has some ideas. Eventually, I'm planning to use this as a flow -somehow- in power automate and power apps.... but need to crack this first part.

Thanks, Gregg AZ

Your use case is not valid. Windows Explorer

You can, in your script, do something like this.. (dropping the call to Out-GridView as it's not needed for your end results)

# find those files
Get-ChildItem -Path  'F:\ispy\video\SWVL'   |  
Where-Object {
$PSItem.lastWriteTime.TimeOfDay.Hours -gt 23 -or 
$PSItem.LastWriteTime.TimeOfDay.Hours -lt 06} | 
# copy them to a temp location
Copy-Item -Destination 'SomeTempPath' -Verbose

# open explorer in that location
Invoke-Item -Path 'SomeTempPath'

... then delete that location when you are done.

Windows Explorer-specific search/filtering is only possible in Windows Explorer. So, that means you can only search to get a specific property, then use GUI automation to send that to the Windows Explorer search box.

Otherwise, just skip the script and know this to avoid overcomplicating what you are after.

In Windows Explorer, you can filter the files by date in File Explorer using the date: keyword. You can use this keyword to find files created before, on or after a certain date. You can use the “>” and “<” signs to find files created after or before the given date. “>=” and “<=” also apply here. While you can manually type the date, File Explorer provides a simple calendar that will show up every time you type date: on the search box.

在此处输入图像描述

In a script, you'd have to duplicate the aforementioned. Thus capturing the date in your search, opening Windows Explorer and using SendKeys or AutoIT to select the search box and paste the info then sending enter.

Update as per my comment regarding the pop-up calendar. You can do this, in Windows Explorer to filter by date/date ranges

Manually type it in manually, which of course you could GUI automate via SendKeys or AutoIT. 在此处输入图像描述

Click the down arrow on any date column. 在此处输入图像描述

In the built-in Windows Sandbox on the latest WinOS builds, the popup still works from the Windows Explorer searchbox.

在此处输入图像描述

... but not on other host systems.

Update as per our last comments... Yet, if you are really trying to send to the Explore serachbox, then this kludge can do it,...

Start-Process -FilePath 'Explorer' 'd:\temp'
Add-Type -AssemblyName System.Windows.Forms
Start-Sleep -Seconds 2
[System.Windows.Forms.SendKeys]::SendWait('+{TAB}'*2)
[System.Windows.Forms.SendKeys]::SendWait('date: 04-Apr-20..11-Jan-21')
Start-Sleep -Seconds 1
[System.Windows.Forms.SendKeys]::SendWait('{Enter}')

... but warning SendKeys is quirky, timing-wise, etc. Sometimes is works, sometimes it does not.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM