Mount Remote Share

Easily mount a share from a remote host.

— Binary Adventures

If you use RoyalTS, here’s a little script that makes it easy to mount a remote host’s share to a local drive. In essence, it performs the same functionality as net use * \\host\share /USER:domainname\username.

How it works

Free drive letter

In PowerShell New-PSDrive is the way to mount a share. There is no matching option for the * argument in net use though (the asterisk maps the share to the first available drive letter). This post provides a convenient one-liner that iterates through all drive letters from D to Z, and returns the first one available.

(68..90 | %{$L=[char]$_; if ((gdr).Name -notContains $L) {$L}})[0]

Authentication

Using Out-GridView, the user is presented with a list of available share (retrieved with Get-WmiObject). To query the host and mount the selected share, we need the proper credentials. One option could be to run the script as a different user, but that means the drive won’t be visible in Explorer, as described in the notes section of the New-PSDrive documentation:

Mapped network drives are specific to a user account. Mapped drives created in elevated sessions or sessions using the credential of another user aren’t visible in sessions started using different credentials.

Instead, $Username and $Password are script parameters, passed on by RoyalTS. We wrap them into a PSCredential object, and add it to the Get-WmiObject and New-PSDrive call.

Feedback

To provide feedback of the outcome, we use the BurntToast module. When the mount is successful, it shows a notification including a button to open the drive in Explorer. If there was an error, the notification contains the error message.

All that’s left is to configure a new Command Task object in RoyalTS with the following settings:

  • Command: %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe
  • Arguments: -WindowStyle Minimized -File Mount-Share.ps1 -ComputerName $URI$ -Username $EffectiveUsername$ -Password $EffectivePassword$
  • Credentials: Select Use the context credentials and uncheck Run task in user context of credential

Code

Reference