Powershell: How can I get the UNC path from an OpenFileDialog without the leaf?

I’m still a beginner in Powershell…
I’m using the OpenFileDialog to give the user the possibility to choose a file on the network.

Add some .net Assembly for OpenFileDialog and MessageBox

Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName PresentationFramework

This is the OpenFileDialog-Definition

$FileBrowser = New-Object System.Windows.Forms.OpenFileDialog

With this the OpenFileDialog will be opened and shown to the user for choosing a file

$null = $FileBrowser.ShowDialog()

This is the UNC-filename with extension included that the user has chosen in OpenFileDialog

$full_filename = $FileBrowser.FileName

This is only the filename with extension (leaf) that the user has chosen in OpenFileDialog

$filename = $FileBrowser.SafeFileName

This converts the array-elements into strings

$full_filename_string = [string]$full_filename
$filename_string = [string]$filename

So far, so good.
What I would need additionally is the UNC-path ONLY from the subdirectory, in which the user has chosen a file (UNC-path without the leaf).

How could this be accomplished?

>Solution :

Use the Split-Path cmdlet:

PS ~> '\\hostname\share\path\to\directory\with_file.exe' |Split-Path -Parent

Beware that the Split-Path will convert \ to / on linux file systems, to avoid that you’d have to manually split the string on the last occurrence of \:

PS ~> $path,$name = '\\hostname\share\path\to\directory\with_file.exe' -split '\\(?=[^\\]*$)'
PS ~> $path
PS ~> $name

Leave a Reply