Цитата nugzari:
Мне нужна ваша помощь. Решил добавить в контекстное меню папки команду Streams для отображения и удаления Zone.Identifier (Альтернативные потоки NTFS). Вручную не очень удобно к тому же он у тех файлов которых я скопировал с HDD друга(у меня отключено Zone.Identifier) »
|
Самый простой способ, создать раздел FAT32 и использовать его как буфер... никаких альтпотоков не останется.
Если, всё же, нет желания удалять 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 не выводит альтернативные потоки каталогов...