Write-Host
предназначен только для отправки текстовых символов на ваш терминал, будь то приглашение PowerShell или что-то еще, и вы не можете перехватить его в переменной, как пытаетесь это сделать.
Мы можем упростить ваш код до этого, чтобы получить только те пути, которые длиннее 260.
$paths = Get-ChildItem $newPath -force -Recurse |
Where-Object { ($_.FullName.Length -gt $maxLength) } | Select-Object -Expand Fullname
, которые должны дать вам просто список слишком длинных каталогов, хранящихся внутри $paths
. Вы можете экспортировать его в CSV-файл, например, так:
$paths | Export-Csv C:\PathTo\MyCooL.csv
И именно в этот момент вы должны сделать паузу и решить, как действовать.
Этот тип процесса часто пытаются и как улей мы решили, что это не идеальный кандидат для автоматизации. Вместо этого человек должен просмотреть список, а затем разумно принять правильное решение о переименовании каталогов.
Почему? Было бы очень легко сломать некоторые приложения, если бы ваш скрипт переименования запустил amuk, например, в C:\ProgramData\
. Просматривая список, вы можете найти глубоко вложенные установки, содержащие распространяемые файлы Visual C ++ или другое важное содержимое. Вам нужно будет сделать правильный вызов, чтобы переименовать его, чтобы сделать это безопасно.