У меня есть простой скрипт для обхода дерева каталогов.
function GetSubFolders([IO.DirectoryInfo]$folder) {
Write-Host "Getting folder $folder"
Get-ChildItem $folder | ? { $_.PSIsContainer } | % { GetSubFolders $_ }
}
Если я позвоню GetSubFolders "c:\temp"
, произойдет сбой для каждого подкаталога, найденного в c: \ temp:
Get-ChildItem: Невозможно найти путь 'C: \ WINDOWS \ system32 \ somefolder
Где "somefolder" - это подкаталог c: \ temp. Переменная $_
явно является System.IO.DirectoryInfo
объектом, но почему она лишена своего абсолютного пути и внезапно создана относительно текущего каталога, c: \ windows \ system32? Обратите внимание, что при входе в этот метод он правильно выводит
Получение папки c: \ temp
Это означает, что он работает один раз, поэтому не может быть проблем с Get-ChildItem
принятием объекта DirectoryInfo
в качестве параметра.