Pregunta

is it possible to open a explorer window from powershell and store the path selected in the explorer, to a variable?

to open explorer window from powershell

PS C:> explorer

¿Fue útil?

Solución

Maybe this script is what you want:

Function Select-FolderDialog
{
    param([string]$Description="Select Folder",[string]$RootFolder="Desktop")

 [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") |
     Out-Null     

   $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
        $objForm.Rootfolder = $RootFolder
        $objForm.Description = $Description
        $Show = $objForm.ShowDialog()
        If ($Show -eq "OK")
        {
            Return $objForm.SelectedPath
        }
        Else
        {
            Write-Error "Operation cancelled by user."
        }
    }

Use as:

$folder = Select-FolderDialog # the variable contains user folder selection

Otros consejos

I found the use of reflection in the selected answer to be a little awkward. The link below offers a more direct approach

http://www.powershellmagazine.com/2013/06/28/pstip-using-the-system-windows-forms-folderbrowserdialog-class/

Copy and pasted relevant code:

Add-Type -AssemblyName System.Windows.Forms
$FolderBrowser = New-Object System.Windows.Forms.FolderBrowserDialog
[void]$FolderBrowser.ShowDialog()
$FolderBrowser.SelectedPath

The above did not work for me. Running Windows 7 with Powershell Version 2. I did find the following, which did allow the pop-up and selection:

    Function Select-FolderDialog
    {
         param([string]$Description="Select Folder",[string]$RootFolder="Desktop")

     [System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") Out-Null     

     $objForm = New-Object System.Windows.Forms.FolderBrowserDialog
     $objForm.Rootfolder = $RootFolder
     $objForm.Description = $Description
     $Show = $objForm.ShowDialog()
     If ($Show -eq "OK")
     {
         Return $objForm.SelectedPath
     }
     Else
     {
        Write-Error "Operation cancelled by user."
     }
    }

Just in case others have the same issues.

Just wanted to post an addendum, I believe there is a pipe | missing from in-between:

[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")

and:

Out-Null

Here is a solution that opens explorer dialog window, asking user to select a folder. Then stores the folder path inside a variable named "path":

Add-Type -AssemblyName System.Windows.Forms
$browser = New-Object System.Windows.Forms.FolderBrowserDialog
$null = $browser.ShowDialog()
$path = $browser.SelectedPathode

Your code worked for me only after I have replaced ".SelectedPathode" with ".SelectedPath"

Add-Type -AssemblyName System.Windows.Forms
$browser = New-Object System.Windows.Forms.FolderBrowserDialog
$null = $browser.ShowDialog()
$path = $browser.SelectedPath

Here is also the documentation regarding the respective property - https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.folderbrowserdialog.selectedpath?view=net-5.0

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top