Powershell outputs Directory paths differently sometimes -
i'm using ls find directories convention. works in finds them, i'm piping results other functions. depending on way 'ls' (aka: dir) called. why happening?
c:\tmp40d4> ls *_pkg -recurse | %{"$_"} c:\tmp40d4\sub\a_pkg c:\tmp40d4\sub\b_pkg c:\tmp40d4\sub\c_pkg c:\tmp40d4> ls sub *_pkg -recurse | %{"$_"} a_pkg b_pkg c_pkg both results list of directoryinfo instances.
c:\tmp40d4> ls sub *_pkg -recurse | %{$_.gettype()} ispublic isserial name basetype -------- -------- ---- -------- true true directoryinfo system.io.filesysteminfo true true directoryinfo system.io.filesysteminfo true true directoryinfo system.io.filesysteminfo
as turns out, directoryinfo instances provided alternative calls ls result in different directoryinfo instances. specifically,
ls sub *_pkg -recurse | %{ [io.path]::ispathrooted($_) } result in
false false false while ls *_pkg -recurse | %{ [io.path]::ispathrooted($_) } result in
true true true it's important remember ls doesn't display anything. "$_" in %{ "$_" } shorthand write-host $_ equivalent write-host $_.tostring().
so turns out tostring() on non-rooted directoryinfo result in name, where-as tostring() on rooted use fullname.
Comments
Post a Comment