Перейти к содержимому

Как через powershell проверить есть ли файл на файловых шарах или нет

Задача есть файл который лежит в одном месте и надо проверить если ли файл на других сетевых шарах и сделать сводную таблицу

# Параметры скрипта
$sourceFolder = "D:\buffer"  # Корневая папка для поиска MP4 файлов
$share1 = "\\Msk-fs\sm_06$" # Первая шара
$share2 = "\\Msk-fs\sm_05$" # Вторая шара
$csvReport = "C:\temp\comparison1.csv" # CSV файл с результатами

# Создаем коллекцию для хранения результатов
$results = @()

# Получаем все MP4 файлы из исходной папки (рекурсивно)
$mp4Files = Get-ChildItem -Path $sourceFolder -Filter "*.mp4" -Recurse -File
$totalFiles = $mp4Files.Count
$processed = 0

# Обрабатываем каждый файл
foreach ($file in $mp4Files) {
    $processed++
    # Преобразуем локальный путь в пути на шарах
    $relativePath = $file.FullName.Substring($sourceFolder.Length)
    $sharePath1 = $share1 + $relativePath
    $sharePath2 = $share2 + $relativePath
    
    # Проверяем существование файла на обеих шарах
    $existsOnShare1 = Test-Path -Path $sharePath1 -PathType Leaf
    $existsOnShare2 = Test-Path -Path $sharePath2 -PathType Leaf
    
    # Определяем статус файла
    $status = if ($existsOnShare1) {
        "Found on bdsm_06"
    } elseif ($existsOnShare2) {
        "Found on bdsm_05"
    } else {
        "Missing on both"
    }
    
    # Определяем фактический путь, где найден файл
    $actualPath = if ($existsOnShare1) {
        $sharePath1
    } elseif ($existsOnShare2) {
        $sharePath2
    } else {
        "N/A"
    }
    
    # Получаем информацию о файле
    $fileInfo = [PSCustomObject]@{
        LocalPath = $file.FullName
        SharePath_bdsm_06 = $sharePath1
        SharePath_bdsm_05 = $sharePath2
        Status = $status
        ActualPath = $actualPath
        FileSizeMB = [math]::Round($file.Length / 1MB, 2)
        LastModified = $file.LastWriteTime
        CheckDate = Get-Date
    }
    
    # Добавляем результат в коллекцию
    $results += $fileInfo
    
    # Выводим прогресс
    Write-Progress -Activity "Проверка файлов" -Status "Обработано $processed из $totalFiles" `
                   -PercentComplete ($processed / $totalFiles * 100)
}

# Экспортируем результаты в CSV
$results | Export-Csv -Path $csvReport -Encoding UTF8 -NoTypeInformation -Delimiter ";"

# Формируем статистику
$foundOn06 = ($results | Where-Object { $_.Status -eq "Found on sm_06" }).Count
$foundOn05 = ($results | Where-Object { $_.Status -eq "Found on sm_05" }).Count
$missingBoth = ($results | Where-Object { $_.Status -eq "Missing on both" }).Count

Write-Host "`nОтчет сформирован: $csvReport"
Write-Host "`nСтатистика проверки:"
Write-Host "Всего файлов проверено: $totalFiles"
Write-Host "Найдено на sm_06: $foundOn06 ($([math]::Round($foundOn06/$totalFiles*100, 2))%)"
Write-Host "Найдено на sm_05: $foundOn05 ($([math]::Round($foundOn05/$totalFiles*100, 2))%)"
Write-Host "Отсутствует на обоих шарах: $missingBoth ($([math]::Round($missingBoth/$totalFiles*100, 2))%)"

# Открываем CSV файл (раскомментируйте если нужно)
# Invoke-Item $csvReport

 

Similar Posts:

Метки:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика