Parameterise instance name for backup script
This commit is contained in:
37
backup.ps1
37
backup.ps1
@@ -1,14 +1,19 @@
|
|||||||
|
param(
|
||||||
|
[Parameter(Mandatory=$true)]
|
||||||
|
[string]$SqlInstance
|
||||||
|
)
|
||||||
|
|
||||||
#
|
#
|
||||||
# backup.ps1
|
# backup.ps1
|
||||||
#
|
#
|
||||||
# TODO: Update cleanup time based on backup type
|
# TODO: Update cleanup time based on backup type
|
||||||
|
|
||||||
$sqlInstance = "sqlfcsql\TESTINST"
|
$instanceName = $SqlInstance.Split('\')[1]
|
||||||
#$directory = "H:\Backup"
|
|
||||||
$directory = "C:\Rubrik\mount"
|
$directory = "C:\Rubrik\$instanceName"
|
||||||
$fullBackupDay = 'Thursday'
|
$fullBackupDay = 'Thursday'
|
||||||
$checkCluster = $false
|
$checkCluster = $false
|
||||||
$logFile = "C:\Rubrik\backup.log"
|
$logFile = "C:\Rubrik\backup-$instanceName.log"
|
||||||
|
|
||||||
$fullFlag = $directory + "\last_full.flag"
|
$fullFlag = $directory + "\last_full.flag"
|
||||||
$diffFlag = $directory + "\last_diff.flag"
|
$diffFlag = $directory + "\last_diff.flag"
|
||||||
@@ -29,21 +34,35 @@ function Write-Log($message) {
|
|||||||
Write-Host $logEntry
|
Write-Host $logEntry
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Check if directory exists and is a symbolic link
|
||||||
|
if (-not (Test-Path $directory)) {
|
||||||
|
Write-Log "ERROR: Directory '$directory' does not exist. Exiting script."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
$directoryInfo = Get-Item $directory
|
||||||
|
if (-not ($directoryInfo.Attributes -band [System.IO.FileAttributes]::ReparsePoint)) {
|
||||||
|
Write-Log "ERROR: Directory '$directory' is not a symbolic link. Exiting script."
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Log "INFO: Directory '$directory' exists and is a symbolic link. Target: $($directoryInfo.Target). Proceeding."
|
||||||
|
|
||||||
if ($checkCluster) {
|
if ($checkCluster) {
|
||||||
# Check if SQL instance is running locally
|
# Check if SQL instance is running locally
|
||||||
$localNode = $env:COMPUTERNAME
|
$localNode = $env:COMPUTERNAME
|
||||||
$instanceName = $sqlInstance.Split('\')[1]
|
|
||||||
$clusterInstance = Get-ClusterResource | Where-Object { $_.ResourceType -eq "SQL Server" -and $_.Name -eq "SQL Server ($instanceName)" }
|
$clusterInstance = Get-ClusterResource | Where-Object { $_.ResourceType -eq "SQL Server" -and $_.Name -eq "SQL Server ($instanceName)" }
|
||||||
if ($clusterInstance) {
|
if ($clusterInstance) {
|
||||||
$ownerNode = $clusterInstance.OwnerNode.Name
|
$ownerNode = $clusterInstance.OwnerNode.Name
|
||||||
if ($ownerNode -ne $localNode) {
|
if ($ownerNode -ne $localNode) {
|
||||||
Write-Log "SQL instance '$sqlInstance' is not running on local node '$localNode'. Exiting script."
|
Write-Log "SQL instance '$SqlInstance' is not running on local node '$localNode'. Exiting script."
|
||||||
exit 1
|
exit 1
|
||||||
} else {
|
} else {
|
||||||
Write-Log "SQL instance '$sqlInstance' is running on local node '$localNode'. Proceeding."
|
Write-Log "SQL instance '$SqlInstance' is running on local node '$localNode'. Proceeding."
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Write-Log "ERROR: SQL instance '$sqlInstance' not found in cluster resources."
|
Write-Log "ERROR: SQL instance '$SqlInstance' not found in cluster resources."
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -77,7 +96,7 @@ if ((Get-Date).DayOfWeek -eq $fullBackupDay) {
|
|||||||
$query = "EXECUTE [dbo].[DatabaseBackup] @Databases = 'ALL_DATABASES', @Directory = '$directory', @BackupType = '$backupType', @Verify = 'N', @CleanupTime = $cleanupTime, @CheckSum = 'Y', @LogToTable = 'Y'"
|
$query = "EXECUTE [dbo].[DatabaseBackup] @Databases = 'ALL_DATABASES', @Directory = '$directory', @BackupType = '$backupType', @Verify = 'N', @CleanupTime = $cleanupTime, @CheckSum = 'Y', @LogToTable = 'Y'"
|
||||||
Write-Log "Executing backup type: $backupType"
|
Write-Log "Executing backup type: $backupType"
|
||||||
|
|
||||||
$sqlcmdOutput = & sqlcmd -S $sqlInstance -Q $query 2>&1
|
$sqlcmdOutput = & sqlcmd -S $SqlInstance -Q $query 2>&1
|
||||||
$sqlcmdExitCode = $LASTEXITCODE
|
$sqlcmdExitCode = $LASTEXITCODE
|
||||||
|
|
||||||
if ($sqlcmdExitCode -eq 0) {
|
if ($sqlcmdExitCode -eq 0) {
|
||||||
|
|||||||
@@ -32,8 +32,8 @@
|
|||||||
If $true, keep the temporary script and task after completion. Default $false = cleanup.
|
If $true, keep the temporary script and task after completion. Default $false = cleanup.
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
# Using gMSA
|
# Using gMSA (no need to user $ at end of name)
|
||||||
.\createSAcreds.ps1 -Domain AD -AccountName rubrikgmsa -AccountType gMSA -SaJsonPath C:\temp\sa.json -OutputXmlPath C:\temp\sa-rbksql.xml
|
.\createSAcreds.ps1 -Domain AD -AccountName rubrikgmsa -AccountType gMSA -SaJsonPath C:\Rubrik\scripts\sa.json -OutputXmlPath C:\Rubrik\scripts\sa-rbksql.xml
|
||||||
|
|
||||||
.EXAMPLE
|
.EXAMPLE
|
||||||
# Using regular service account with password prompt
|
# Using regular service account with password prompt
|
||||||
@@ -77,7 +77,7 @@ try {
|
|||||||
|
|
||||||
# ---- Create the one-shot script that will run under the service account ----
|
# ---- Create the one-shot script that will run under the service account ----
|
||||||
$oneShotContent = @"
|
$oneShotContent = @"
|
||||||
# One-shot script created by create-and-run-one-shot-via-gMSA.ps1
|
# One-shot script created by createSAcreds.ps1
|
||||||
# Runs RubrikSecurityCloud command to create service-account file
|
# Runs RubrikSecurityCloud command to create service-account file
|
||||||
|
|
||||||
# Start transcript for detailed logging
|
# Start transcript for detailed logging
|
||||||
@@ -134,7 +134,7 @@ Try {
|
|||||||
Exit 4
|
Exit 4
|
||||||
}
|
}
|
||||||
} Catch {
|
} Catch {
|
||||||
Write-Error "Error creating RBK service-account file: `$(`$_.Exception.Message)"
|
Write-Error "Error creating Rubrik service-account file: `$(`$_.Exception.Message)"
|
||||||
Write-Error "Full exception: `$(`$_.Exception | Format-List * | Out-String)"
|
Write-Error "Full exception: `$(`$_.Exception | Format-List * | Out-String)"
|
||||||
Write-Error "Stack trace: `$(`$_.ScriptStackTrace)"
|
Write-Error "Stack trace: `$(`$_.ScriptStackTrace)"
|
||||||
Stop-Transcript
|
Stop-Transcript
|
||||||
@@ -156,10 +156,10 @@ Try {
|
|||||||
# Construct the UserId based on account type
|
# Construct the UserId based on account type
|
||||||
if ($AccountType -eq 'gMSA') {
|
if ($AccountType -eq 'gMSA') {
|
||||||
$userId = if ([string]::IsNullOrWhiteSpace($Domain)) { "$AccountName`$" } else { "$Domain\$AccountName`$" }
|
$userId = if ([string]::IsNullOrWhiteSpace($Domain)) { "$AccountName`$" } else { "$Domain\$AccountName`$" }
|
||||||
$logonType = 'Password' # For gMSA, use Password logon type
|
$logonType = 'Password' # needed even though gMSA uses AD for auth
|
||||||
} else {
|
} else {
|
||||||
$userId = if ([string]::IsNullOrWhiteSpace($Domain)) { $AccountName } else { "$Domain\$AccountName" }
|
$userId = if ([string]::IsNullOrWhiteSpace($Domain)) { $AccountName } else { "$Domain\$AccountName" }
|
||||||
$logonType = 'Password' # For regular service accounts, use Password logon type
|
$logonType = 'Password'
|
||||||
}
|
}
|
||||||
|
|
||||||
# Action: run PowerShell to execute the one-shot script with output redirection
|
# Action: run PowerShell to execute the one-shot script with output redirection
|
||||||
@@ -255,7 +255,7 @@ Try {
|
|||||||
Write-Warning "Log file not found at: $logFile"
|
Write-Warning "Log file not found at: $logFile"
|
||||||
}
|
}
|
||||||
|
|
||||||
throw "Scheduled task finished with non-zero LastTaskResult: $lastResult. Check Event Viewer > Applications and Services Logs > Microsoft > Windows > TaskScheduler for details, or review the log output above."
|
throw "Scheduled task finished with non-zero LastTaskResult: $lastResult."
|
||||||
}
|
}
|
||||||
|
|
||||||
# ---- Cleanup ----
|
# ---- Cleanup ----
|
||||||
|
|||||||
Reference in New Issue
Block a user