Должен ли он быть точным? Зачем? Как говорится, если вы разбираете строки в Powershell, вы, вероятно, делаете что-то не так ... во всяком случае ...
1) Просто позвоните в cmd.exe.
PS> cmd /c "dir /s /b /a-d *.* > c:\files.txt"
2) Я полагаю, что вы можете получить те же результаты от родного Powershell. Но я не могу отвечать за тестирование каждого крайнего случая с NTFS-переходами, скрытыми файлами и т. Д.
PS> gci -r | ?{ !$_.psiscontainer } | %{ $_.fullname } | out-file c:\files.txt
Лично я ненавижу тот факт, что вы не можете использовать «select» для извлечения свойства FullName без странных побочных эффектов для нижестоящих командлетов. Если бессмысленность цикла foreach беспокоит вас так же сильно, как и меня, используйте Get-PropertyValue из PSCX или Linq-Select из Джош Эйнштейн .