Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Windows 10 (http://forum.oszone.net/forumdisplay.php?f=118)
-   -   Удаление NTFS-потока для папки без подтверждения (http://forum.oszone.net/showthread.php?t=349400)

test009 15-08-2021 09:33 2964254

Удаление 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
Но выдает ошибку:

Iska 15-08-2021 12:14 2964255

А это:
Цитата:

Цитата test009
echo c:\helloworld\hello.txt > hello »

зачем?


Цитата:

Цитата test009
Запрашивается подтверждение, где надо нажать Y или Enter, »

У меня:
Код:

Remove-Item -Path "C:\helloworld" -Stream *
удаляет без запроса (PS 5.1, Windows 7 SP1 x64).

1) до и 2) после отработки кода:
Скрытый текст

test009 15-08-2021 12:41 2964256

Удаляет без запроса если папка пустая.
Это нужно чтобы сделать папку не пустой и оттестить именно этот кейс.

Извиняюсь, напутал.
Так правильно:
Цитата:

echo hello > c:\helloworld\hello.txt

Iska 15-08-2021 14:26 2964267

Цитата:

Цитата test009
Это нужно чтобы сделать папку не пустой и оттестить именно этот кейс. »

Это не делает папку не пустой. Текст «c:\helloworld\hello.txt » помещается в файл «hello» в текущем каталоге.


Понятно.

Сдаётся мне, что это ошибка в реализации самого командлета. И не только этого. Скажем:
Код:

Get-Item -Path 'C:\helloworld' -Stream '*'
ничего не возвращает (в отличие от указания файла).

test009 15-08-2021 16:07 2964269

а можно как-то перенаправить пользовательский ввод?
чтобы я как будто типа ввел букву Y

Iska 15-08-2021 16:53 2964270

Сомневаюсь.

Vadikan 16-08-2021 12:34 2964308

Цитата:

Цитата test009
Хочу его удалить (из powershell):
Код:

Remove-Item -Path "C:\helloworld" -Stream *
Запрашивается подтверждение, где надо нажать Y или Enter, а мне нужно удалять без этого подтверждения. »

У Remove-Item нет параметра Stream, если указана папка. Попробуйте ввести
Код:

Remove-Item -Path "C:\helloworld" -
и нажатьCtrl+Space

Remove-Item и Get-Item не работают с папками
Цитата:

-Stream
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/sysintern...nloads/streams

Iska 16-08-2021 13:07 2964310

Цитата:

Цитата Vadikan
У Remove-Item нет параметра Stream, если указана папка. »

Смотрите выше сообщения #1 и #2. Параметр -Streams работает для каталога. Проблема состоит в том, что для удаления потока из непустого каталога задаётся запрос. Для отключения запроса используется легальный (а как по мне — совершенно бредовый), описанный в документации способ с -Recourse и -Confirm:$false. И вот здесь уже «сходит с ума» парсер командлета, теряя атрибут параметра -Streams.

Цитата:

Цитата Vadikan
Цитата:

This parameter isn't valid on folders.
»

О! В новой версии добавили в справку.


Время: 23:43.

Время: 23:43.
© OSzone.net 2001-