Задача есть файл который лежит в одном месте и надо проверить если ли файл на других сетевых шарах и сделать сводную таблицу
# Параметры скрипта $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:
- Как искать внутри GPO групповых политик.
- Как искать текст в файле с помощью PowerShell и сохранить путь и строку где этот текст встречается.
- Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.
- Как завершить сессию на всех серверах в локальной сети.
- Как в always on mssql синхронизировать логины и пароль на вторичной реплики и удалять логины когда удалили на первичной c проверкой хэш паролей