This question translates in to the impression that you are very new to PowerShell. So, it is vital that you get ramped up on it to limit / avoid misconceptions, bad habits, errors, and serious frustration, that you are guaranteed to encounter. Hit up YouTube/MSDN Channel9 and search for beginning, intermediate, advanced PowerShell, as well as PowerShell file system management and PowerShell file and folder management.
PowerShell will, in many cases try to coerce things, but it will not try and figure out what you want to do. You have to tell it what to do. Well, this is true for any computer language.
Your problem here is the you say ...
(relative to the root from where I run the command)
... well, you could be in a path that is X level deep from the root drive, so, now you are in a child, and the extrapolation is that you want this only from the child. Here's the rub with that thought process.
Save this off to a text file, then would never have the drive path and as such when you go back to use it, you are going to have to know that and put it back in manually in order to use the files again.
So, I am not sure what you use case is, for this effort, but logically it will come back to bite you.
So, let's say, I am here:
Push-Location -Path 'E:\Temp'Then we run this
Get-ChildItem -recurse | Where-Object { !$_.PSIsContainer } | Select-Object -Property FullName # Results FullName -------- E:\Temp\about_ReGet-ChildItemection Microsoft Docs.url ... E:\Temp\ZipMultiFolder.zip E:\Temp\Folder\Log_20190419.txt ... E:\Temp\Reports\NewFiles.zip ...So, here we just get the current location ...
Get-ChildItem -recurse | Where-Object { !$_.PSIsContainer } | Select-Object -Property @{Name = 'RelativePath';Expression = {"\$($pwd.Drive.CurrentLocation)\$($PSItem.Name)"}}So, here we just get the current path we are in and only ask for the filename, not the fullname
# Results RelativePath ------------ \Temp\about_ReGet-ChildItemection Microsoft Docs.url ... \Temp\ZipMultiFolder.zip \Temp\Folder\Log_20190419.txt ... \Temp\Reports\NewFiles.zip ...If we output this to a CSV, you have no idea what drive this came from. So, now you have to search every drive on your machine to find them, or remember where you were when you did this.
Going a child down, same thing. Sure, you get this, but where is it really? On your system, or on some network drive you mapped to.
Push-Location -Path 'E:\Temp\Folder'Then we run this
Get-ChildItem -recurse | Where-Object { !$_.PSIsContainer } | Select-Object -Property FullName # Results FullName -------- E:\Temp\Folder\Log_20190419.txt E:\Temp\Folder\New Bitmap Image.bmp E:\Temp\Folder\New Text Document - Copy.txt E:\Temp\Folder\New Text Document.txt Get-ChildItem -recurse | Where-Object { !$_.PSIsContainer } | Select-Object -Property @{Name = 'RelativePath';Expression = {"\$($pwd.Drive.CurrentLocation)\$($PSItem.Name)"}} RelativePath ------------ \Temp\Folder\Log_20190419.txt \Temp\Folder\New Bitmap Image.bmp \Temp\Folder\New Text Document - Copy.txt \Temp\Folder\New Text Document.txtAnd if you are saying, here, you don't want the parent root, then you tirm that off.
Yet, that means, not only do you not know what drive it came from, but you don't know what root parent in came from either.
So, Just say'in.
BTW, it's a best practice to use the full cmdlet name in scripts. Shorthand / aliases are fine for interactive stuff. Sure, we are all habited in using 'dir', but the shorthand got Get-ChildItem is 'gci', which is just as short as did, but, you know.
But hey, habits are really hard to break. ;-} --- --- and the prudent decisions are those that work for us, regardless of what anyone else thinks. ;-}
Well, those that follow you make take a stance. So being a good PowerShell citizen is really a good thing.
BTW, if you were going to do this in a script, there is an automatic variable for this sort of thing as well. Well, getting the location where the script was ran, and anything associated in that location.
See this article.
Add Script Flexibility with Relative File Paths