Как передать имя каталога в Remove-Item?

Я не очень хорошо разбираюсь в powershell, поэтому любая помощь приветствуется.

У меня есть диск, на котором хранятся профили пользователей. Мне нужно удалить определенный файл из профиля каждого пользователя. Он устроен примерно так. (Имена изменены, чтобы защитить невиновных.)

  • E:\Profiles
    • UserID
      • Documents
      • Другие папки
      • DirectoryToDeleteFrom
        • FileToDelete.txt
    • UserID2
      • ...
      • ...

Я мог бы использовать следующую команду, чтобы удалить все файлы, к которым мне нужно добраться, но она невыносимо медленная, поскольку повторяется во всех других папках под UserID.

#this one would work perfectly, but is terribly slow
Get-ChildItem -Path E:\Profiles -Include FileToDelete.txt -Recurse

Я точно знаю, где находится каждый файл, поэтому я подумал, что смогу это сделать.

(Get-ChildItem -Path 'E:\Profiles' -Exclude *.lnk)|ForEach-Object{Remove-item -path 'E:\Profiles\' + $_.Name + '\Path\To\File\FileToDelete.txt'}

Но я получаю следующее сообщение об ошибке:

Remove-Item : невозможно найти позиционный параметр, который принимает аргумент «+». В строке: 1 символ: 70 + (Get-ChildItem -Path 'E:\Profiles' -Exclude *.lnk)|ForEach-Object{Remove-item... + ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (:) [Remove-Item], ParameterBindingException + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand

Я думал, что это из-за того, что я передал Remove-Item неверный путь к файлу, но следующая команда генерирует правильные пути.

(Get-ChildItem -Path 'E:\Profiles' -Exclude *.lnk)|ForEach-Object{'E:\Profiles\' + $_.Name + '\Path\To\File\FileToDelete.txt'}

Так что я делаю неправильно здесь?


person RubberDuck    schedule 17.06.2014    source источник


Ответы (1)


Если вы создаете строку на лету для использования внутри другой командой, то поместите путь в скобки:

..{Remove-item -path ('E:\Profiles\' + $_.Name + '\Path\To\File\FileToDelete.txt')}
person Raf    schedule 17.06.2014