Some methods (e.g. System.IO.File.WriteAllLines()) needs absolute paths for parameters, so you have to convert from relative paths to absolute paths. In PowerShell, there is more than one way to do it ($RelativePath contains relative path string):
# | methods or cmdlets | use after Set-Location (change current directory) | use for currently non-existent path | remove “..\” | use for non-existent drive letter |
---|---|---|---|---|---|
1 | [System.IO.Path]::GetFullPath($RelativePath) | ✘ | ✔ | ✔ | ✔ |
2 | Convert-Path $RelativePath | ✔ | ✘ | ✔ | ✘ |
3 | Resolve-Path $RelativePath | ✔ | ✘ | ✔ | ✘ |
4 | [System.IO.Path]::Combine($pwd, $RelativePath) | ✔ | ✔ | ✘ | ✔ |
5 | $ExecutionContext.SessionState.Path .GetUnresolvedProviderPathFromPSPath($RelativePath); |
✔ | ✔ | ✔ | ✘ |
If you want to make a path for new files, I recommend to use #4 (get absolute path) and pass the result to #1 (remove “”..\“).