Скрипт переноса общей папки на сервере с Windows

Понадобилось тут написать небольшой скрипт, после того как массово пришлось переносить папки на файловом сервере на другой диск. Выкладываю его сюда, вдруг кому-нибудь пригодится. Поменяйте только значение переменных на свои.

# Cоздание копии папки $NameFolder находящейся в $FolderPath1 в директорию $FolderPath2 и копирование ее содержимого со всеми атрибутами.
# Проверка есть ли подключения к общей папке. Если нет, то производится остановка расшаривания и докопирование содержимого. Исходная папка рекурсивно удаляется
# Логи сохраняются в папку $LogsFolderPath

$NameFolder = ‘Общая папка отдела’ #название исходной папки
$FolderSource= ‘F:\Общие папки\’ #путь к исходной папке (обязателен обратный слэш в конце пути)
$FolderDest = ‘D:\Общие папки\’ #путь к папке назначения (обязателен обратный слэш в конце пути)
$LogFolder = ‘C:\MoveFolderLogs\’ #путь к папке с логами (должна быть создана вручную)

$notshare = $false #определяем, что по-умолчанию исходная папка расшарена
$LogFile = $LogFolder + «sync-$NameFolder.log»
$FolderPath1 = $FolderSource+$NameFolder
$FolderPath2 = $FolderDest+$NameFolder

if (!(Test-Path -Path $LogFolder)){
Write-Host «Не создана папка для логов!» -ForegroundColor Yellow }

$SmbShare = Get-SmbShare | where {$_.Path -eq «$FolderPath1» }
if (!(Test-Path -Path $FolderPath2)){
$ACL = Get-Acl $FolderPath1 -Audit
Write-Host «Создание папки назначения» -ForegroundColor Green
New-Item -name $NameFolder -Path $FolderDest -ItemType Directory 1>$null
Set-Acl -AclObject $ACL -Path $FolderPath2
} else
{ Write-Host «Папка назначения уже создана» -ForegroundColor Green }
if (!($SmbShare)){
Write-Host «Исходная папка не расшарена» -ForegroundColor Yellow
$notshare = $true;
$NewSmbShareName = $NameFolder
}
if ((($SmbShare).CurrentUsers -eq «0») -or ($notshare -eq $true)){
if ($notshare -eq $false){
Write-Host «Зашаривание общей папки» -ForegroundColor Green
Remove-SmbShare -Name ($SmbShare).Name -Force
Write-Host «Начинаем копировать файлы общей папки…» -ForegroundColor Yellow -NoNewline
robocopy.exe $FolderPath1 $FolderPath2 /COPYALL /E /DCOPY:DAT /R:3 /W:5 /V /NP /NS /LOG+:$LogFile 1>$null
Write-Host «Завершено» -ForegroundColor Green
Write-Host «Расшаривание общей папки по новому расположению» -ForegroundColor Green
New-SmbShare -Name ($SmbShare).Name -Path $FolderPath2 -CachingMode None -ChangeAccess «Everyone» 1>$null
Write-Host «Удаление исходной папки» -ForegroundColor Green
Remove-Item -Path $FolderPath1 -Force -Recurse
}
else {
Write-Host «Начинаем копировать файлы общей папки…» -ForegroundColor Yellow -NoNewline
robocopy.exe $FolderPath1 $FolderPath2 /COPYALL /E /DCOPY:DAT /R:3 /W:5 /V /NP /NS /LOG+:$LogFile 1>$null
Write-Host «Завершено» -ForegroundColor Green
Write-Host «Расшаривание общей папки по новому расположению» -ForegroundColor Green
New-SmbShare -Name $NewSmbShareName -Path $FolderPath2 -CachingMode None -ChangeAccess «Everyone» 1>$null
Write-Host «Удаление исходной папки» -ForegroundColor Green
Remove-Item -Path $FolderPath1 -Force -Recurse
}
}
else {
Write-Host «Подключений к общей папке»($SmbShare).Name»:»($SmbShare).CurrentUsers -ForegroundColor Yellow
Write-Host «Начинаем копировать файлы общей папки…» -ForegroundColor Yellow -NoNewline
robocopy.exe $FolderPath1 $FolderPath2 /COPYALL /E /DCOPY:DAT /R:3 /W:5 /V /NP /NS /LOG+:$LogFile 1>$null
Write-Host «Завершено» -ForegroundColor Green
Write-Host «Запустите этот скрипт повторно после завершения активных SMB-подключений» -ForegroundColor Red
}

Veeam. Проблема с бекапом на ленту

В случае если у вас Veeam Backup выдает ошибку «Failed to start new tape backup session: Failed to get last session number, sessions map is empty» или «Failed to get last session number, sessions map is empty. Failed to get last session number, sessions map is empty.«, знайте, что нужно найти последнюю использованную кассету и очистить ее.  После этого можно запускать бекап на ленту вновь и он должен успешно начаться.
У меня эта ошибка началась после того как база Veeam Backup перестала быть доступной в момент бекапа на ленту. Бекап аварийно завершился и больше не запускался, выпадая с ошибкой, указанной выше.

Veeam Backup: existing backup meta file on repository is not synchronized with the DB

Привет! Недавно столкнулся с очередной проблемой на Veeam Backup and Replication 9.5. Сервер Veeam подвис и я не смог к нему подключиться ни через RDP или RPC, ни через managment интерфейс (HP iLO). Пришлось сервер перезагружать по питанию. После этого я попытался запустить задания бекапа, которые не выполнились за прошедшую ночь и тут посыпались одинаковые ошибки:
Cannot proceed with the job: existing backup meta file 'D:\Backup\test.vbm' on repository 'Scale-Out_Repository' is not synchronized with the DB. To resolve this, run repository rescan.
Я попытался сделать сканирование репозитория но ничего не вышло: ошибка появлялась вновь.  При этом задания бекапа логов автоматически запустились через повторный перезапуск сервисов Veeam и начали успешно бекапить SQL.  Попытался создать клон задания — оно начало выполняться. Далее начал смотреть сами vbm  файлы, точнее их содержание и тут обнаружилось: все файлы, на которые ругался Veeam полностью либо частично повреждены, точнее в них содержится набор нечитаемых символов. Так это выглядело в Notepad++:

В логах бекапа SQL логов нашлось более интересная вещь:По крайней мере стало понятно, что произошел какой-то сбой на сервере, в результате которого вместо информации о бекапах текущего задания в файл сам Veeam начал заносить текст со слетевшей кодировкой.
После этого обратился в поддержку Veeam, где они посоветовали удалить файл vbm и запустить задание вновь. О чудо все заработало. Оказывается в случае если в директории нет файла  vbm, то тогда Veeam  берет информацию о бекапе из базы своей базы данных. Вот такая вот интересная история.

Ошибка восстановления базы данных SQL

Veeam Backup & Replication 9.5 Update 4. Столкнулся с ошибкой при восстановлении базы MSSQL на не оригинальный сервер. После нескольких десятков минут копирования данных (база более 2 ТБ) задание завершалось с ошибкой:
Database restore failed: Failed to read block from file: C:\Windows\TEMP\o1p4abst.bwj\MSSQL.1\MSSQL\Data\work_data.mdf The system cannot find the file specified.
Database restore failed: Failed to read block from file: C:\Windows\TEMP\o1p4abst.bwj\MSSQL.1\MSSQL\Data\work_data.mdf The system cannot find the file specified.

Если глянуть логи на сервере, куда данные восстанавливаются, то там будет следующий текст:
dpl| ERR |Failed to execute DoRpcWithBinary. Command name: 'DoSerialRpc'.
dpl| >> |[NO_SESSION_ERROR] Cannot find session
dpl| >> |--tr:Failed to get session with id {e59b788f-ccea-4656-b68d-3392c8176097}
dpl| >> |--tr:Failed to call DoRpc. CmdName: [DoSerialRpc] inParam: [<InputArguments/>].
dpl| >> |An exception was thrown from thread [3876].

В системном логе была найдена такая ошибка:
Log Name: System
Source: Microsoft-Windows-NDIS
Date: 28.09.2020 17:17:15
Event ID: 10400
Task Category: None
Level: Warning
Keywords:
User: N/A
Description:
The network interface "vmxnet3 Ethernet Adapter" has begun resetting. There will be a momentary disruption in network connectivity while the hardware resets.
Reason: The network driver detected that its hardware has stopped responding to commands.
This network interface has reset 3 time(s) since it was last initialized.

Последний лог и подтолкнул сделать обновление драйверов на виртуальную сетевую карту vmware, т.к. vmware tools были очень древние. И, о чудо, обновление помогло. Следующий раз восстановление прошло успешно!

Особенности бекапа реплики в Veeam Backup

Привет! К несчастью,  столкнулся с такой особенностью, что когда делаешь бекап не оригинальной виртуальной машины, а ее копии (реплики), то тогда итоговый результат в бекапе будет не вполне тем, что хочешь получить. Бекап будет или частично или полностью недоступен при восстановлении. А все это из-за технологии CBT, которая включена по-умолчанию в заданиях бекапа Veeam и ускоряет процесс создания инкрементного бекапа. В случае бекапа реплики, нужно CBT отключать в настройках задания! А правильнее вариант — сначала делать бекап с боевой виртуальной машины и только после делать реплику, источником которой будут файлы резервной копии, в настройках задания репликации это можно указать в Veeam BR. Информация  эта от поддержки Veeam, которая, в свою очередь, ссылается на форум Veeam, где есть об этом информация в виде сообщения от 2010 года 🙂

Ошибка c event id 8194 в VSS

Если у вас после создания теневой копии в Windows Server 2016 возникла ошибка в логе Application «hr = 0x80070005 Access is denied» от источника VSS с Event ID 8194, то знайте, что это стандартная ошибка на свежеустановленной системе и чтобы ее решить надо зайти в настройки DCOM, набрав dcomcnfg и учетной записи Network Service предоставить право локального доступа. Как это сделать смотрите на скриншоте ниже.

После этого нужно перезапустить службу «Система событий COM+» или в английской редакции «COM+ Event System» и затем службу «Теневое копирование тома» или «Volume Shadow Copy» в английской редакции и после этого ошибка из логов пропадет при создании снапшота диска.

Не обновляется Symantec Endpoint Protection

Привет! Если у вас в логе «C:\ProgramData\Symantec\Symantec Endpoint Protection\[номер версии]\Data\Logs\cve.log» есть сообщения вида:
[ERROR] cve::SylinkCommunicatorImpl::PerformLUCheck: http::ServerException occurred during get content file information — ServerException HTTP error code is: 400
[ERROR] Send of message returned error 400 Bad Request то скорее всего ты столкнулся с той же ошибкой что и я. Выглядит она так: после установки клиента антивируса Symantec он не может скачать обновления с сервера, на котором установлен Symantec Endpoint Protection Manager. И ничто не помогает в решении этой проблемы.
Оказывается дело в сервере с Symantec Endpoint Protection Manager. В нем есть такая настройка «Prevent clients from downloading full definition packages» и она была у меня включена.
Она находится в Admin — Servers — <Имя хоста с SEPM> — Edit the server properties — Full Definitions Download.
После снятия здесь галочки клиенты начали сразу скачивать долгожданные обновления.

Выгрузка опубликованного приложения из VMware Workspace One (Airwatch)

1. Подключиться к базе данных Airwatch через Microsoft SQL Server Managment Studio.
2. В Management Studio нажать на кнопку «New Query» и выполнить запрос:
SELECT TOP (1000) [blobID]
,[blobStream]
,[blobType]
,[blobName]
,[blobDescription]
,[blobUploadDate]
,[blobSize]
,[IsPrivate]
,[blobGUID]
FROM [AirWatch].[dbo].[BlobMaster] ORDER BY blobUploadDate DESC

Запрос выводит первые 1000 элементов загруженных в таблицу BlobMaster из базы данных Airwatch и отсортированных по дате загрузки в обратном порядке.
3. В столбце «blobName» найти нужное название приложения:

По полю blobUploadDate и blobSize убедиться, что это то приложение, что нужно.

4. Если необходимо найти “обернутое” приложение, то выше найденного приложения будет еще одно с именем “download” в столбце «blobName». По размеру приложения и времени загрузки (отличающегося на несколько минут) от строки ниже убедиться, что это то самое приложение.
5. У найденной строки с необходимым приложением запомнить значение поля blobID
6. На сервере с базой данных проверить, что установлена утилита bcp, которая запускается из командной строки. Если такая не установлена, то ее можно скачать с сайта Microsoft.
7. Запустить команду в командной строке:
bcp "SELECT blobStream FROM AirWatch.dbo.BlobMaster where blobID=996" queryout C:\test.apk –T
где 996 – это номер blobID из пункта 5. На вопросы утилиты bcp отвечать в таком виде:
Enter the file storage type of field blobStream [varbinary(max)]: нажать “Enter”
Enter prefix-length of field blobStream [8]: ввести 0 и нажать “Enter”
Enter length of field blobStream [0]: нажать “Enter”
Enter field terminator [none]: нажать “Enter”
Do you want to save this format information in a file? [Y/n] нажать “n”. Должно получиться что-то вроде этого:Выгруженный файл должен быть в корне диска C:\ с именем «test.apk», это и будет приложение, которое требовалось скачать.

Veeam: Ошибка «Full backup file merge failed»

Привет! При бекапе большой базы данных на хранилище, располагающееся на Windows Server 2008R2 возникла ошибка «Full backup file merge failed Error: Agent: Failed to process method {Transform.Patch}: The parameter is incorrect. Failed to write data to the file«. При проверке выяснилось, что полный файл бекапа (.vbk) составляет 15,9 Tb, файловая система NTFS и размер кластера на нем 64KПоддержка Veeam нашла статью, в которой говорится, что «максимальный размер файла в Windows 2008R2 составляет меньшее из 2 чисел: 2^32-1 помноженное на размер кластера ИЛИ 16 ТБ». Отсюда вывод: пора переносить бекап на другой сервер с более новой операционной системой 🙂

Veeam Backup: Failed to call RPC function ‘GetBiosUuid’: Error code: 0x80041017

Привет! Сегодня новая ошибка. При добавлении сервера в оснастку Veeam Backup возникла такая ошибка: «Collecting hardware info Error: Failed to call RPC function ‘GetBiosUuid’: Error code: 0x80041017. Cannot query class instance from enumerator object»

Для решения проблемы проверяем, что локально на проблемном сервере wmi запрос выполняется, запускаем powershell и запускаем команды:
gwmi -Class win32_bios
gwmi -Class win32_computersystemproduct | fl *
wmic path win32_computersystemproduct get uuid

Должны они выполниться успешно. Если это так, то перезапускаем службу «Windows Management Instrumentation» и радуемся жизни 🙂