Access already mapped network drive in PowerShell

I am running a Windows Server 2012 installation inside VMWare Workstation. I have shared folders enabled, so drive Z: is mapped to \\vmware-host. I can correctly access this drive in Explorer (I can access Z: inside the "normal" `cmd) and I can properly open files.

I opened PowerShell and tried to to cd Z: and I got the following error:

cd : Cannot find path 'Z:\' because it does not exist.

Why can't PowerShell find the already mapped network drive?

I Googled a bit, and found the New-PSDrive command. I ran the following:

New-PSDrive -Name 'Z' -PSProvider FileSystem -Root 'Z:\'

but I still get the same error as above. What do I need to do to access the VMWare shared folders inside PowerShell.


Solution 1:

You need to make the drive mapping available to the user you're running Powershell as. You can do the following to give that user the same drive mapping:

net use Z: "\\vmware-host\Shared Folders"

See the following SO question: Cannot access network drive in PowerShell running as administrator

Solution 2:

Are you starting this PowerShell console as Administrator or as your current user?

If you are running it from a non-elevated command prompt, then it should see all your locally mapped network drives. I'm in the same situation as you right now and have x: mapped to \\vmware-host\[folder], and a Get-PSDrive -PSProvider FileSystem shows me all my locally mapped drives.

However, if I start this console as an Administrator, it does not see any of my local mapped drive, as for an elevated command prompt a different (second) security context is used to load the application, which does not share network connections.

The good news is that you basically just need to map the drive in the administrator console just once and it will remain in that security context (until a reboot, I think).

If you want to automate this, you should read up on auto-loading scripts when you start a powershell session. Basically if you create a folder in your My Documents called WindowsPowerShell and inside that create a Microsoft.PowerShell_profile.ps1 file, it will trigger every time you start a new powershell console. There you can add a net use command, or add custom functions that you've written that you want to use.

For example, I have one that turns my cursor red for administrative consoles, and has a function that I can easily call to sign my PS1 scripts.