【发布时间】:2015-07-23 12:51:19
【问题描述】:
我编写了一个 powershell 脚本,用于将本地 sqlserver 备份到 azure blob。它基于我从 MSDN 获取的一个,但我添加了一个额外的功能来删除任何超过 30 天的旧备份。当我以用户身份运行它时,它工作正常。当我将它添加到任务计划程序时,设置为以我身份运行,并且我手动要求它运行,它工作正常。 (所有输出都被捕获在一个日志文件中,所以我可以看到它都在工作)。当我晚上没有登录时从任务计划程序运行时(任务计划程序设置为以我身份运行脚本),它会失败。具体来说,它声称我在调用 Set-AzureSubscription 时不知道我的天蓝色订阅名称。然后,尝试删除 blob 时失败:
Get-AzureStorageBlob : Can not find your azure storage credential. Please set current storage account using "Set-AzureSubscription" or set the "AZURE_STORAGE_CONNECTION_STRING" environment variable.
有问题的脚本:
import-module sqlps
import-module azure
$storageAccount = "storageaccount"
$subscriptionName = "SubName"
$blobContainer = "backup"
$backupUrlContainer = "https://$storageAccount.blob.core.windows.net/$blobContainer/"
$credentialName = "creds"
Set-AzureSubscription -CurrentStorageAccountName $storageAccount -SubscriptionName $subscriptionName
$path = "sqlserver:\sql\servername\SQLEXPRESS\databases"
$alldatabases = get-childitem -Force -path $path | Where-object {$_.name -eq "DB0" -or $_.name -eq "DB1"}
foreach ($db in $alldatabases)
{
Backup-SqlDatabase -BackupContainer $backupUrlContainer -SqlCredential $credentialName $db
}
$oldblobs = Get-AzureStorageBlob -container backup | Where-object { $_.name.Contains("DB") -and (-((($_.LastModified) - $([DateTime]::Now)).TotalDays)) -gt $(New-TimeSpan -Days 30).TotalDays }
foreach($blob in $oldblobs)
{
Write-Output $blob.Name
Remove-AzureStorageBlob -Container "backup" -Blob $blob.Name
}
脚本的备份部分有效,只是 blob 删除部分无效。当我登录时,似乎正在对环境进行某些操作,以允许 azure powershell 脚本工作,但是当我在晚上未登录时运行命令时,这并没有完成。
有人知道那可能是什么吗?
任务计划程序设置为运行带有
的命令Powershell -Command "C:\Scripts\BackupDatabases.ps1" 2>&1 >> "C:\Logs\backup.log"
【问题讨论】:
标签: powershell azure azure-storage azure-blob-storage windows-server-2012