Author Posts

May 8, 2014 at 3:27 am

Hi

Using PS 4.O. I am using a mapped 'home' drive (T:) to store my scripts so that they are backed up nightly. When I set my default location to this drive using Set-Location T:\Scripts cmdlet I get the following:

Set-Location : Cannot find path 'T:\Scripts' because it does not exist.
At C:\Users\Tony.Wainwright\Documents\WindowsPowerShell\Microsoft.PowerShellISE_profile.ps1:1 char:1
+ Set-Location T:\Scripts
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (T:\Scripts:String) [Set-Location], ItemNotFoundException
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

Looking through the help I have found the New-PSDrive cmdlet this sorts out my problem:

New-PSDrive -Name T -PSProvider FileSystem -Root "\\Lincoln\Data\Tony Wainwright"
Set-Location T:\Scripts

However this now shows the output of the New-PSDrive. Is there a way I can pipe the New-PSDrive to Set-Location?

Thanks
Tony

May 8, 2014 at 8:22 am

To get it not to show the output of the New-PSDrive you could just pipe it to Out-Null, so you'd get:

New-PSDrive -Name T -PSProvider FileSystem -Root "\\Lincoln\Data\Tony Wainwright" | Out-Null
Set-Location T:\Scripts

If you relly want to pipe it, Set-Location does accept the Path parameter by name, so you could do:

New-PSDrive -Name T -PSProvider FileSystem -Root "\\Lincoln\Data\Tony Wainwright" | Select @{N="Path";E={"$($_.Name):\Scripts"}} | Set-Location

May 8, 2014 at 11:44 pm

Thanks Robert just what I need.

What's the difference between the 2 in terms of adherence to best practice? I'm trying to learn PS and know that there's now right or wrong way as long as it works. I just don't want to get into any bad habits at the start.

May 9, 2014 at 1:59 am

I can't speak for best practices or not, but if you ask me the Select makes the code harder to read. I'd probably do something like:

$newDrive = New-PSDrive -Name T -PSProvider FileSystem -Root "\\Lincoln\Data\Tony Wainwright"
Set-Location "$($newDrive.Name):\Scripts"

This is easy to read and the Set-Location will still take the drive name from the return value of the New-PSDrive cmdlet.

May 9, 2014 at 2:01 am

Thanks. I agree that reading it is easier