Я не очень хорошо разбираюсь в 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'}
Так что я делаю неправильно здесь?