Windows IT Pro is the authoritative and independent resource for windows nt, windows 2000, windows 2003, windows xp. Features a collection of resources and magazines for windows IT professionals.
  
  
  Advanced Search 


June 18, 2008

Why the PowerShell Working Directory and the PowerShell Location Aren't One in the Same


RSS
Subscribe to Windows IT Pro | See More Scripting Articles Here | Reprints | Or get the Monthly Online Pass—only $5.95 a month!
Main Article    Use the .NET WebClient Class in PowerShell Scripts to Access Web Data

Every process on a Windows system has a working directory associated with it when the process starts. Simply put, when an application has to work with pathnames, it assumes that any bare filenames or partial paths are relative to the working directory.

 

The reasons for this setup are pretty easy to demonstrate. Suppose you're in the Cmd.exe console shell and you're navigating through your home directory structure looking at files and folders. To get a listing of the files in that folder beginning with the letter a, you type

 

dir a*

 

at the command prompt. Because Cmd.exe always starts out in the home directory, it sees this as a partial name and assumes you want to see names starting with the letter a in the working directory. This assumption saves a lot of repetitive typing. It also makes it much easier to write scripts or use applications that deal with special subsets of files in particular locations.

 

You can change your working directory in Cmd.exe by using the CD command. Relative paths will then be resolved based on that new working directory.

 

What's important to understand about PowerShell is that although PowerShell's location is analogous to the working directory, the location is not the same thing as the working directory. In fact, PowerShell doesn't touch the working directory.

 

Here's what happens. When PowerShell starts up, it has a working directory just like any other application. This is typically the user's home directory. Internally, PowerShell exposes a location as a convenience for PowerShell-native tools; initially, that location is the user's home directory.

 

You can change your location by using the Set-Location cmdlet or its aliases sl and cd. The location can be anywhere accessible to PowerShell providers, including disk directories, registry paths, and data stores that are structured like disks. Through it all, PowerShell cmdlets and scripts can refer to items in their current location with relative names.

 

However, it gets confusing if you use an external application or API that works with files. Let's say you're JaneUser on a Vista system, and your home directory is C:\Users\JaneUser. You start up PowerShell and change your location to C:\tmp with the command

 

Set-Location C:\tmp

 

Inside PowerShell, your location is C:\tmp. However, your working directory is still going to be C:\Users\JaneUser. You can verify this through the CurrentDirectory property exposed by the Microsoft .NET Framework's System.Environment class by running the command

 

[Environment]::CurrentDirectory

 

Why is this important? Well, any external application or API that expands filenames by default is going use the working directory of its parent process; for PowerShell, this is still going to be C:\Users\JaneUser. So .NET methods such as the WebClient's DownloadFile need extra help if you want them to resolve bare filenames relative to the PowerShell location.

 

PowerShell was designed this way because the working directory concept was inadequate—PowerShell needed to expose data stores such as the registry as working locations. It would have been possible to change the working directory to any valid file-system location, but this has some significant security issues. Changing the working directory to a directory of interest makes an application vulnerable to content in that directory. This wouldn't affect PowerShell or PowerShell-native tools, but Windows-native applications would be exposed to spoof attempts.

 

The upshot of it all is that when you're running Windows-native applications or calling Windows APIs from PowerShell that directly use named files, the working directory is never going to follow your file-system location.

 

End of Article



Reader Comments

You must log on before posting a comment.

If you don't have a username & password, please register now.




Top Viewed ArticlesView all articles
The Memory-Optimization Hoax

Don't believe the hype. At best, RAM optimizers have no effect. At worst, they seriously degrade performance. ...

Friday at PASS Europe 2006

Kevin talks about the closing day of the event and shares a funny Microsoft film. ...

Escape From Yesterworld

Kevin points you to the funniest SQL Server website ever! ...


Related Events Check out our list of Free Email Newsletters!

Scripting eBooks Keeping Your Business Safe from Attack: Encryption and Certificate Services

Best Practices for Managing Linux and UNIX Servers

Building an Effective Reporting System

Related Scripting Resources Become a VIP member of the Windows IT Pro community!
Get it all with the VIP CD and VIP access. A $500+ value for only $279!

Subscribe to Windows IT Pro!
Solve your toughest technical problems with our experts and access 10,000 + articles online. 30% off

Monthly Online Pass - Only $5.95!
Get instant access to 10,000+ articles from Windows IT Pro Magazine!

TechNet Virtual Labs
Evaluate and test Microsoft's newest products.

Job Openings in IT


ADS BY GOOGLE SPONSORED LINKS FEATURED LINKS

Maximize your SharePoint Investment – 8 Cities
Discover best practices and tips for both architecting and administering SharePoint. Early Bird Price of $99 through Sept 15th.

Find a new job now on the all new IT Job Hound!
Search jobs, post your resume, and set up job e-mail alerts!

Master SharePoint with 3 eLearning Seminars
Learn how to build a better SharePoint infrastructure and enable powerful collaboration with MVPs Dan Holme and Michael Noel. Register today!

Top Tools for Virtualization Disaster Recovery & Replication
View this web seminar on August 14th to learn about two tools that will result in faster backup and restore with P2V disaster recovery.

SharePointConnections Conference Fall 2008
Don’t miss the premier event for Microsoft IT Professionals in Las Vegas, November 10-13. Register and book your room by August 25 and receive a FREE room night (based on a three night minimum stay).

VMworld 2008 - Sign Up Today!
Join your peers on September 15-18 at The Venetian Hotel in Las Vegas as VMware hosts VMworld 2008, the leading Virtualization event.



Entrust Unified Communications Certs
Secure Exchange 2007 and save 20%. Now through Sept. 2008.

Increase Application Performance
Free White Paper by Editor's Best winner, Texas Memory Systems.

Need to convert between XML, DBs, EDI, and Excel? Try MapForce free!
Drag & drop to transform between popular data formats – get results instantly or generate code.

Microsoft® Tech•Ed EMEA 2008 IT Professionals
Advance your thinking with new ideas and practical real-world solutions at Microsoft’s FIVE day technical infrastructure conference 3-7 Nov., 2008. Register before 26 September 2008 to save €300.

Order Your SQL Fundamentals CD Today!
Learn how to use SQL Server, understand Office integration techniques and dive into the essentials of SQL Express and Visual Basic with this free SQL Fundamentals CD.

Are You Really Compliant with Software Regulations?
View this web seminar that will help you with compliance best practices and check out a management solution to assure that you won’t be in jeopardy of an audit.

Virtualization Congress Oct. 14-16 in London
Don't miss Virtualization Congress, the premiere EMEA conference dedicated to hardware, OS and application virtualization. Oct. 14-16.
Windows IT Pro Home Register FAQ for Windows WinInfo News
Europe Edition About Us Contact Us/Customer Service Media Kit Affiliates / Licensing  
SQL Server Magazine Office & SharePoint Pro Windows Dev Pro IT Job Hound ITTV
IT Library Technical Resources Directory Connected Home Windows Excavator Windows SuperSite 
 
 Windows IT Pro is a Division of Penton Media Inc.
 Copyright © 2008 Penton Media, Inc., All rights reserved. Terms and Use | Privacy Statement | Reprints and Licensing