|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Zone.Identifier (Альтернативные потоки NTFS) |
|
|
CMD/BAT - Zone.Identifier (Альтернативные потоки NTFS)
|
Новый участник Сообщения: 18 |
Профиль | Отправить PM | Цитировать здравствуйте уважаемые участники форума! Мне нужна ваша помощь. Решил добавить в контекстное меню папки команду Streams для отображения и удаления Zone.Identifier (Альтернативные потоки NTFS). Вручную не очень удобно к тому же он у тех файлов которых я скопировал с HDD друга(у меня отключено Zone.Identifier)
Например хочу посмотреть какие файлы в папке имеет Альтернативные потоки NTFS : Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Streams] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Streams\command] @="cmd /k streams64.exe -s \"C:\\Users\\Admin\\Downloads\"" \"C:\\Users\\Admin\\Downloads\"" как же сделать так чтобы вместе этого адреса чтоб был текущий каталог с контекстного меню которого вызвал эту команду Спасибо заранее! |
|
Отправлено: 09:51, 14-08-2019 |
Ветеран Сообщения: 992
|
Профиль | Сайт | Отправить PM | Цитировать |
Отправлено: 12:10, 14-08-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата nugzari:
Если, всё же, нет желания удалять ADS, то можно вместо сторонних программ, воспользоваться встроенным powershell+cmd: Скрипт для получения ADS имен файлов и каталогов
<# .SYNOPSIS Отображение альтернативных потоков файлов и каталогов .Description Скрипт предназначен для получения имен альтернативных потоков файлов и каталогов. Присваиваются отдельные идентификаторы для элементов и их альт. потоков, а также размер. .Parameter Elements Обязательный: Необходимо указать путь к каталогу, либо к отдельному файлу. Указанный каталог в выборку не включается, содержимым будут подкаталоги и файлы, находящиеся в этом каталоге. При рекурсии это поведение не изменится. .Parameter Root Переключатель: Используется для дополнительного включения в выборку указанного(ых), корневого(ых) каталога(ов) .Parameter Attributes Необязательный: Получает файлы и папки с указанными атрибутами. Этот параметр поддерживает все атрибуты и позволяет указывать сложные комбинации атрибутов. Соответствует параметру Attributes командлета Get-Childitem. .Parameter Hidden Переключатель: Для выбора файлов или каталогов с атрибутом Hidden .Parameter ReadOnly Переключатель: Для выбора файлов или каталогов с атрибутом ReadOnly .Parameter System Переключатель: Для выбора файлов или каталогов с атрибутом System .Parameter Force Переключатель: Для выбора всех файлов или каталогов с любым атрибутом .Parameter Recurse Переключатель: Для рекурсивного выбора файлов или каталогов .Example .\script.ps1 'd:\TEST' -force -rec|ogv Это пример рекурсивной выборки всех файлов и каталогов, с любым атрибутом, из корневого каталога d:\TEST и вывода результата в таблицу out-gridview .Example .\script.ps1 . -attr D+H,S -rec|ft Это пример рекурсивной выборки только каталогов с атрибутом Hidden или же выборки файлов и каталогов с атрибутом System из корневого каталога d:\TEST и вывода результата в таблицу out-gridview .Notes Created By YuS Version: 1.00 Date: 11/03/2019 Purpose/Change: Первая версия Version: 1.01 Date: 11/03/2019 Purpose/Change: Добавлен параметр -Root Version: 1.02 Date: 14/03/2019 Purpose/Change: Добавлен параметр -Attributes для более гибкого отбора .Link <здесь была ссылка на форум, где скрипт опубликован ранее> #> [CmdletBinding()] Param ( [parameter(Mandatory=$true)] [string[]]$elements,[switch]$hidden,[switch]$readonly,$attributes, [switch]$system,[switch]$force,[switch]$recurse,[switch]$root ) function testpth {[CmdletBinding()] Param ( [parameter(Mandatory=$true)] [string[]]$elem,$attr,[switch]$hid,[switch]$read, [switch]$sys,[switch]$for,[switch]$rec ) $dpar = @{};$dpar.literalpath = $elem;if ($attr){$dpar.attributes = $attr} if ($hid){$dpar.hidden = $true};if ($read){$dpar.readonly = $true} if ($for){$dpar.force = $true};if ($rec){$dpar.recurse = $true} if ($sys){$dpar.system = $true} if(test-path $elem -pathtype container){ if($root){gi -lit $elem -force} dir @dpar } elseif (test-path $elem -pathtype leaf){ gi -lit $elem -force } else { write-host Path no correct -for red sleep -s 5 break } } function testitem($x){ if(test-path $x.fullname -patht container){ $fld = $x.fullname ((cmd /c "dir /ad/r ""$fld""").trim()| sls -patt '\d+ +\.:[^:]+:\$data').line|%{if(($a = $_ -split ':')[-2]){ new-object psobject -prop @{ Stream = $a[-2]; Length = [int]$($a[0] ` -replace '^(\d+)*?(\d*)[^\n]*','$1$2') } } } } elseif (test-path $x.fullname -patht leaf){ gi -lit $x.fullname -stream *|? stream -ne ':$data' } } function get-namestream ($item){ [array]$arr = testitem $item for ($i=0;$i -lt $arr.count;$i++){ [pscustomobject]@{ 'IDItem' = $script:k 'IDStream' = $i 'NameStream' = $arr[$i].stream 'Size' = $arr[$i].length 'Container' = if ($item.psiscontainer){$true}else{$false} 'Path' = $item.fullname } };if ($arr){$script:k++} } $k=0 $tpar=@{}; $tpar.elem = $elements;if($attributes){$tpar.attr = $attributes} if ($hidden){$tpar.hid = $hidden};if ($readonly){$tpar.read = $readonly} if ($force){$tpar.for = $force};if ($recurse){$tpar.rec = $recurse} if ($system){$tpar.sys = $system} $p = testpth @tpar|%{get-namestream $_} |group -prop iditem -ashash -asstr 0..($p.count)|%{$p."$_"} В итоге, получим примерно такую картинку: картинка
Использовать можно как для просмотра, так и для удаления... ЗЫ Сразу отвечу на вопрос, который, вероятно, возникнет: "зачем +cmd?" Затем, что, увы, powershell не выводит альтернативные потоки каталогов... |
|
------- Отправлено: 13:28, 14-08-2019 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Если же говорить о практике использования — смотреть особого смысла нет, достаточно тупо исполнять удаление альтернативного потока данных Zone.Identifier (именно одного этого потока, а не всех подряд). Такой я для себя сделал вывод, когда реализовывал аналогичное под Far Manager'ом. |
|
Отправлено: 14:40, 14-08-2019 | #4 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать nugzari,
bat такой reg такой Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\Background\shell\Altern_potok] "MUIVerb"="Альтерн. поток" "Icon"="SHELL32.dll,296" [HKEY_CLASSES_ROOT\Directory\Background\shell\Altern_potok\command] @="\"C:\\Bat\\Altern_potok.bat\"" там есть и фото - доказательство того что все работает для открытой папки из которой идет запуск соотв. пункта конт. меню. |
|
Отправлено: 15:24, 14-08-2019 | #5 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Например, что это: ? размер - одно число, на диске другое... Про вирусы и прочие червяки, которые могут прятаться таким образом и так понятно. А смотреть - всегда полезно, прежде чем, что-то удалять и уничтожать... |
||
------- Отправлено: 17:52, 14-08-2019 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 18:49, 14-08-2019 | #7 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
Но, тем не менее, если данные в ADS присутствуют, то они могут быть либо нужными, либо нейтральными, либо вредными. А чтобы такие данные получить или удалить, их сначала необходимо найти, в том числе и в каталогах. |
||
------- Последний раз редактировалось YuS_2, 14-08-2019 в 20:44. Отправлено: 19:58, 14-08-2019 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
Скрытый текст
local FILE_ATTRIBUTE_DIRECTORY = 0x00000010 if APanel.Visible then -- Активная панель видима? if APanel.FilePanel and APanel.Type == 0 then -- Активная панель файловая? if APanel.Selected then -- Активная панель содержит выделенные элементы? for i = 1, APanel.ItemCount do -- Перебираем все элементы активной панели if Panel.Item(0, i, 8) then -- i-тый элемент активной панели выделен? if bit64.band(Panel.FAttr(0, Panel.Item(0, i, 0)), FILE_ATTRIBUTE_DIRECTORY) ~= FILE_ATTRIBUTE_DIRECTORY then -- i-тый элемент не папка? win.DeleteFile(APanel.UNCPath .. "\\" .. Panel.Item(0, i, 0) .. ":Zone.Identifier") end Panel.Select(0, 0, 1, i) end end else win.DeleteFile(APanel.UNCPath .. "\\" .. APanel.Current .. ":Zone.Identifier") end else mf.msgbox("Не файловая панель", "Активная панель не файловая", 0x00010001) end else mf.msgbox("Нет видимых панелей", "Нет видимых панелей", 0x00010001) end Я не к тому, что смотреть совсем не надо. Просто лично у меня концепция «сначала посмотри, есть ли поток Zone.Identifier, потом удали его» в практическом использовании достаточно быстро выродилась в «просто удали поток Zone.Identifier», потому как это быстрее, а конечный результат тот же . |
|
Отправлено: 00:18, 15-08-2019 | #9 |
Crazy Сообщения: 1171
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата YuS_2:
А если сам что-то спрятал (причины можно даже не рассматривать), но в каком из файлов/каталогов - любимый склероз поет пестню... что делать? Ведь они скрыты, те потоки и увидеть их стандартными способами - никак. Кроме того: чтобы удалить, что-нибудь ненужное, нужно сначала получить что-нибудь ненужное... Это в том смысле, что не станем же мы, при необходимости удаления этого Zone.Identifier, удалять во всех подряд файлах и каталогах, ибо в таком случае, вот это: Цитата Iska:
|
|||
------- Последний раз редактировалось YuS_2, 15-08-2019 в 07:52. Отправлено: 07:44, 15-08-2019 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Альтернативные потоки NTFS — удаление Zone.Identifier | Anonymоus | Скриптовые языки администрирования Windows | 6 | 09-04-2019 19:21 | |
Утилиты - [addon] Unknown Device Identifier | Habetdin | Наборы обновлений для Windows XP/2003/Windows 7 | 10 | 21-06-2012 12:47 | |
Unknown Device Identifier 7.00 | OSZone Software | Новости программного обеспечения | 0 | 06-12-2009 17:07 | |
Ошибка Unknown Device Identifier | truvo | Хочу все знать | 6 | 28-12-2008 23:29 | |
Delphi - Delphi7, потоки | mahsus | Программирование и базы данных | 1 | 19-10-2004 16:46 |
|