Показать полную графическую версию : Удаление NTFS-потока для папки без подтверждения
На папке создан NTFS-поток:
mkdir C:\helloworld
echo Hidden Text > C:\helloworld:MyStream
echo c:\helloworld\hello.txt > hello
Хочу его удалить (из powershell):
Remove-Item -Path "C:\helloworld" -Stream *
Запрашивается подтверждение, где надо нажать Y или Enter, а мне нужно удалять без этого подтверждения.
Рекурсивно или нет - не важно (можно и не рекурсивно). Лишь бы удалилось.
Пробую рекурсивно, как советует консоль (пример нашел на стек оверфлоу):
Remove-Item -Path "C:\helloworld" -Stream * -Recurse -Force -Confirm:$false
Но выдает ошибку:
https://i.imgur.com/hPvwMbQ.png
А это:
echo c:\helloworld\hello.txt > hello »
зачем?
Запрашивается подтверждение, где надо нажать Y или Enter, »
У меня:
Remove-Item -Path "C:\helloworld" -Stream *
удаляет без запроса (PS 5.1, Windows 7 SP1 x64).
1) до и 2) после отработки кода:
https://i.imgur.com/In7SJHg.png
Удаляет без запроса если папка пустая.
Это нужно чтобы сделать папку не пустой и оттестить именно этот кейс.
Извиняюсь, напутал.
Так правильно:
echo hello > c:\helloworld\hello.txt
Это нужно чтобы сделать папку не пустой и оттестить именно этот кейс. »
Это не делает папку не пустой. Текст «c:\helloworld\hello.txt » помещается в файл «hello» в текущем каталоге.
Понятно.
Сдаётся мне, что это ошибка в реализации самого командлета. И не только этого. Скажем:
Get-Item -Path 'C:\helloworld' -Stream '*'
ничего не возвращает (в отличие от указания файла).
а можно как-то перенаправить пользовательский ввод?
чтобы я как будто типа ввел букву Y
Хочу его удалить (из powershell):
Remove-Item -Path "C:\helloworld" -Stream *
Запрашивается подтверждение, где надо нажать Y или Enter, а мне нужно удалять без этого подтверждения. »
У Remove-Item нет параметра Stream, если указана папка. Попробуйте ввести Remove-Item -Path "C:\helloworld" - и нажатьCtrl+Space
Remove-Item и Get-Item не работают с папками
-Stream (https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-item?view=powershell-7.1)
Note
This Parameter is only available on Windows.
Gets the specified alternate NTFS file stream from the file. Enter the stream name. Wildcards are supported. To get all streams, use an asterisk (*). This parameter isn't valid on folders.
Как вариант - парсить вывод streams https://docs.microsoft.com/sysinternals/downloads/streams
У Remove-Item нет параметра Stream, если указана папка. »
Смотрите выше сообщения #1 и #2. Параметр -Streams работает для каталога. Проблема состоит в том, что для удаления потока из непустого каталога задаётся запрос. Для отключения запроса используется легальный (а как по мне — совершенно бредовый), описанный в документации способ с -Recourse и -Confirm:$false. И вот здесь уже «сходит с ума» парсер командлета, теряя атрибут параметра -Streams.
This parameter isn't valid on folders. »
О! В новой версии добавили в справку.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.