2

Ce code identique a été utilisé par 3 serveurs, et un seul d'entre eux échoue silencieusement à déplacer les éléments (il les supprime toujours, mais ils n'apparaissent pas dans le partage).Travail PowerShell SQL Étape Déplacement-L'élément ne fonctionne pas sur 1 serveur

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-Exclusion-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 

L'étape de travail est de type « PowerShell » sur les 3 serveurs et contient ce code identique:

#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 

Si je lance l'étape de travail en utilisant SQL puis les fichiers sont supprimés, mais ne semblent pas en le compte de stockage. Si vous exécutez ce bloc de code manuellement, ils sont déplacés. Lorsque je démarre PowerShell sur le serveur, un message d'erreur s'affiche: "La tentative d'exécution de l'opération InitializeDefaultDrives sur le fournisseur 'FileSystem' a échoué." Toutefois, cela n'a pas vraiment d'impact sur le reste des opérations (copie des fichiers de sauvegarde dans le dossier BackupArchive, par exemple).

Je dois mentionner que la copie article omet également de copier sur la part, mais parvient à copier dans le dossier/BackupArchive

Répondre

0

Apparemment, je me suis dupé sur celui-ci. Pendant le test, j'ai dû exécuter la commande net use dans une invite de commande élevée. Cela a apparemment caché le lecteur mappé à partir de fonctionnalités OS non élevées telles que l'Explorateur Windows et tente de voir son existence via des sessions d'invite de commande non élevée. Je suppose qu'il s'est également automatiquement reconnecté lors des redémarrages car cela ne l'a pas corrigé.

La solution était aussi simple que d'exécuter la commande net use m: /delete à partir d'une invite de commande élevée.

0

Notez que si cela vous aidera mais vous pouvez essayer d'utiliser l'applet de commande New-PSDrive au lieu de net use pour cartographier vos actions:

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 
}