2

Этот идентичный код использовался на 3 серверах, и только один из них делает это без пауз для перемещения элементов (он все еще УДАЛЯЕТ их, но они не отображаются в доля).Шаг задания SQL PowerShell Move-Item не работает на 1 сервере

Azure-MapShare.ps1

param (
    [string]$DriveLetter, 
    [string]$StorageLocation, 
    [string]$StorageKey, 
    [string]$StorageUser 
) 

if (!(Test-Path "${DriveLetter}:")) 
{ 
    cmd.exe /c "net use ${DriveLetter}: ${StorageLocation} /u:${StorageUser} ""${StorageKey}""" 
} 

Get-Исключение-Days.ps1

param (
    [datetime]$startDate, 
    [int]$daysBack 
) 

$date = $startDate 
$endDate = (Get-Date).AddDays(-$daysBack) 

$allDays = 
    do { 
     "*"+$date.ToString("yyyyMMdd")+"*" 
     $date = $date.AddDays(-1) 
    } until ($date -lt $endDate) 

return $allDays 

Migrate-Files.ps1

param(
    [string]$Source, 
    [string]$Filter, 
    [string]$Destination, 
    [switch]$Remove=$False 
) 

#Test if source path exist 
if((Test-Path -Path $Source.trim()) -ne $True) { 
    throw 'Source did not exist' 
} 

#Test if destination path exist 
if ((Test-Path -Path $Destination.trim()) -ne $True) { 
    throw 'Destination did not exist' 
} 

#Test if no files in source 
if((Get-ChildItem -Path $Source).Length -eq 0) { 
    throw 'No files at source' 
} 

if($Remove) 
{ 
    #Move-Item removes the source files 
    Move-Item -Path $Source -Filter $Filter -Destination $Destination -Force 
} else { 
    #Copy-Item keeps a local copy 
    Copy-Item -Path $Source -Filter $Filter -Destination $Destination -Force 
} 

return $True 

Стадию работа типа «PowerShell» на всех 3 серверах и содержит этот идентичный код:

#Create mapping if missing 
D:\Scripts\Azure-MapShare.ps1 -DriveLetter 'M' -StorageKey "[AzureStorageKey]" -StorageLocation "[AzureStorageAccountLocation]\backup" -StorageUser "[AzureStorageUser]" 


#Copy files to Archive 
D:\Scripts\Migrate-Files.ps1 -Source "D:\Databases\Backup\*.bak" -Destination "D:\Databases\BackupArchive" 


#Get date range to exclude 
$exclusion = D:\Scripts\Get-Exclusion-Days.ps1 -startDate Get-Date -DaysBack 7 

#Remove items that are not included in exclusion range 
Remove-Item -Path "D:\Databases\BackupArchive\*.bak" -exclude $exclusion 


#Move files to storage account. They will be destroyed 
D:\Scripts\Migrate-Files.ps1 -Source "D:\Databases\Backup\*.bak" -Destination "M:\" -Remove 


#Remove remote backups that are not from todays backup 
Remove-Item -Path "M:\*.bak" -exclude $exclusion 

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

Когда я запускаю PowerShell на сервере, появляется сообщение об ошибке: «Ошибка при попытке выполнить операцию InitializeDefaultDrives в« FileSystem »не удалось». Однако это не влияет на остальные операции (например, копирование файлов резервных копий в папку BackupArchive).

Я должен упомянуть, что от копирования элемент также не копировать по доле, но удается копировать в папку/BackupArchive

ответ

0

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

Решение было таким же простым, как запуск команды net use m: /delete с приподнятой командной строки.

0

Примечание уверен, если это поможет, но вы можете попробовать использовать New-PSDrive командлет вместо net use для отображения ваших акций:

param (
    [string]$DriveLetter, 
    [string]$StorageLocation, 
    [string]$StorageKey, 
    [string]$StorageUser 
) 

if (!(Test-Path $DriveLetter)) 
{  
    $securedKey = $StorageKey | ConvertTo-SecureString -AsPlainText -Force 
    $credentials = New-Object System.Management.Automation.PSCredential ($StorageUser, $securedKey) 

    New-PSDrive -Name $DriveLetter -PSProvider FileSystem -Root $StorageLocation -Credential $credentials -Persist 
} 
Смежные вопросы