Powershell concatenate an Environment variable with path
Asked Answered
S

2

17

So I have this code:

$userprofile=Get-ChildItem Env:USERPROFILE
$localpath="$userprofile\some\path"

I would expect output of the below from $localpath:

c:\users\username\some\path

However what I get is:

System.Collections.DictionaryEntry\some\path

So, of course, something like cd $localpath fails. How would I accomplish what I need?

Spurtle answered 8/12, 2016 at 19:15 Comment(0)
B
28

A convenient way to obtain the string value rather than the dictionary entry (which is technically what Get-ChildItem is accessing) is to just use the variable syntax: $Env:USERPROFILE rather than Get-ChildItem Env:USERPROFILE.

$localpath = "$env:USERPROFILE\some\path"

For more information:

PowerShell Environment Provider

about_Environment_Variables

Also, the Join-Path cmdlet is a good way to combine two parts of a path.

$localpath = Join-Path $env:USERPROFILE 'some\path'
Bora answered 8/12, 2016 at 19:28 Comment(2)
@AnsgarWiechers Thanks for the thoughtful edit providing examples.Bora
If you come from the CMD-heavy world of Windows Scripting, don't forget to include $ in you setter name. In CMD, Set varname=something would have to be, $varname=something, not varname=something.Pupillary
R
0

Late to the party and apart from whether the example is a good way of getting an environment variable, the actual answer to the question is this:

$userprofile = Get-ChildItem Env:USERPROFILE
$localpath="$($userprofile.Value)\some\path"

This might be functionality of newer versions of Powershell since the original question though.

Raindrop answered 17/10, 2023 at 2:10 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.