- <#
- .SYNOPSIS
- This script lists the special folders enumerated in System.Environment.SpecialFolder
- .DESCRIPTION
- This script first enumerates the SpecialFolder Enum. for each member, the script
- then looks up, and displays, the value of that folder.
- .NOTES
- File Name : Get-SpecialFolders.ps1
- Author : Thomas Lee - tfl@psp.co.uk
- Requires : PowerShell V2 CTP3
- .LINK
- This script posted to:
- http://www.pshscripts.blogspot.com
- MSDN Sample posted at:
- http://msdn.microsoft.com/en-us/library/system.environment.specialfolder.aspx
- .EXAMPLE
- PSH [C:\foo]: . 'E:\PowerShellScriptLib\System.Environment\Get-SpecialFolders.PS1'
- Folder Name Path
- ----------- -----------------------------------------------
- Desktop C:\Users\tfl\Desktop
- Programs C:\Users\tfl\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
- Personal C:\Users\tfl\Documents
- Personal C:\Users\tfl\Documents
- Favorites C:\Users\tfl\NetHood\Favorites
- Startup C:\Users\tfl\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
- Recent C:\Users\tfl\AppData\Roaming\Microsoft\Windows\Recent
- SendTo C:\Users\tfl\AppData\Roaming\Microsoft\Windows\SendTo
- StartMenu C:\Users\tfl\AppData\Roaming\Microsoft\Windows\Start Menu
- MyMusic C:\Users\tfl\Music
- DesktopDirectory C:\Users\tfl\Desktop
- MyComputer
- Templates C:\Users\tfl\AppData\Roaming\Microsoft\Windows\Templates
- ApplicationData C:\Users\tfl\AppData\Roaming
- LocalApplicationData C:\Users\tfl\AppData\Local
- InternetCache C:\Users\tfl\AppData\Local\Microsoft\Windows\Temporary Internet Files
- Cookies C:\Users\tfl\AppData\Roaming\Microsoft\Windows\Cookies
- History C:\Users\tfl\AppData\Local\Microsoft\Windows\History
- CommonApplicationData C:\ProgramData
- System C:\Windows\system32
- ProgramFiles C:\Program Files (x86)
- MyPictures C:\Users\tfl\Pictures
- CommonProgramFiles C:\Program Files (x86)\Common Files
- #>
- ##
- # Start of Script
- ##
- # Get the list of special folders
- $folders = [system.Enum]::GetValues([System.Environment+SpecialFolder])
- # Display these folders
- "Folder Name Path"
- "----------- -----------------------------------------------"
- foreach ($folder in $folders) {
- "{0,-22} {1,-15}" -f $folder,[System.Environment]::GetFolderPath($folder)
- }
- #End of Script
This blog contains PowerShell scripts, more PowerShell scripts and still more PowerShell scripts. Occasionally you may see some organisational posts.
Wednesday 5 August 2009
Get-SpecialFolders.ps1
Subscribe to:
Post Comments (Atom)
5 comments:
I'm curious why you choose to return strings not objects (say [System.IO.DirectoryInfo]). I do love the enum trick though, they are my newest friends.
Thanks for the comment.
I wrote the script simply to enumerate each Special Folder and where on my system it pointed to. I used the ENUM to work out what the set of special folder names were, then I called GetFolderPath to get the path for that folder, which I then display. If I'd wanted to do more things, then using the DirectoryInfo object might have been useful.
I borrowed code from this script. I know how the code works to get special folders. What I don't know is the syntax:
$folders = [system.Enum]::GetValues([System.Environment+SpecialFolder])
Why System.Environment+SpecialFolder? What is different (other than that System.Environment.SpecialFolder does not work in this instance)?
I hate using code without understanding the syntax, though I know what it does, it is frustrating; I have never seen the syntax mentioned anywhere else.
David,
I'm not sure why this particular bit of syntax (i.e. using the "+") works and why normal dotting doesn't. I spent hours trying to figure this out and came up with little to explain it, other than this works. I'd love to know too, but I just chalk it up to 'you just have to know'!
Thanks for your comment.
The reason for the plus sign is due to public child classes. SpecialFolder is a public class nested within the System.Environment class. When referencing public child classes you have to use a + sign. We posted an article about this a while back on the PowerShell blog: http://blogs.msdn.com/b/powershell/archive/2009/08/27/plus-in-net-class-names.aspx
-- Tom
Post a Comment