Скрипт для сравнения наличия файлов из одной папки в другую, где установлен флаг архива (атрибуты файла O) - PullRequest
2 голосов
/ 06 декабря 2011

Я создаю сценарий powershell для запроса наличия архивированных файлов в папке, в которую они архивируются.

Расширитель дисков EMC перемещает файл из оперативного хранилища в архивное хранилище и оставляет заглушку / ссылку на файл.

Вы все еще можете перечислить архивную заглушку в дереве каталогов, и файл все еще имеет тот же размер, но на самом деле это архивная заглушка, вероятно, размером 1 КБ.

Атрибут файла (ов) архивной заглушки дает значение O

Мне нужно запросить файлы в оперативной папке, где атрибут файла = O

затем сравните список с моим архивным каталогом на другом сервере, выведя файлы, которых нет в моем архиве, где в оперативном хранилище существует архивная заглушка.

В основном мне нужно знать, как запросить атрибут файла, чтобы получить O и выполнить сравнение.

1 Ответ

2 голосов
/ 06 декабря 2011

Эта функция (взято из здесь ) вернет либо true, либо false, в зависимости от вашего атрибута O

function Get-FileAttribute{
param($file,$attribute)
$val = [System.IO.FileAttributes]$attribute;
if((gci $file -force).Attributes -band $val -eq $val){$true;} else { $false; }
} 

Get-FileAttribute "C:\PST\T.dll" "Offline"

. Вы можете использовать что-то вроде этого:

function Get-FileAttribute{
param($file,$attribute)
$val = [System.IO.FileAttributes]$attribute;
if((gci $file -force).Attributes -band $val -eq $val){$true;} else { $false; }
} 

# Get items both from folder and from archive
$folder = "C:\pst"
$archive = "C:\pst"
$itemsFromFolder = get-childitem $folder -recurse
$itemsFromArchive = get-childitem $archive -recurse

# Filter items from folder to have only offline files
$offlineItemsFromFolder = New-Object 'System.Collections.Generic.List[System.IO.FileInfo]'
foreach($item in $itemsFromFolder)
{
$isOffline = Get-FileAttribute $item.FullName  "Offline"
if ($isOffline)
{
    $offlineItemsFromFolder.Add($item)
}
}

# Compare each offline item from folder with item from archive
foreach($item in $offlineItemsFromFolder)
{
    $result = $itemsFromArchive | Where-Object {$_.FullName -eq $item.FullName.Replace($folder, $archive)}
# Do some processing depending on $result being $true or $false
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...