Restore-AzRecoveryServicesBackupItem - 为调用提供的用户输入无效

问题描述 投票:0回答:1

我正在编写一个 Powershell 脚本,以从另一个恢复保管库恢复 Azure 恢复保管库上的备份项目。 这是脚本的主要轮廓(非常精炼的版本):

#modules and variables
import-module Az

$Sub = "MyAzureSubscription"
$RsvSource = "MySourceRecoveryVault"
$RsvTarget = "MyTargetRecoveryVault"
$SubContext = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$SourceDB = "SourceDB"
$TargetDB = "TargetDB"
$SQLTargetInstance = "instance"
$SQLTargetServer = "SQLServer"

#Get Backup item from Azure RSV
Connect-AzAccount -Identity -Subscription $Sub

Set-AzContext -subscription $SubContext

$SourceVault = Get-AzRecoveryServicesVault | Where-Object { $_.name -eq $RsvSource }
$TargetVault = Get-AzRecoveryServicesVault | Where-Object { $_.name -eq $RsvTarget }

Set-AzRecoveryServicesVaultContext -Vault $SourceVault

$BackupItem = Get-AzRecoveryServicesBackupItem -BackupManagementType AzureWorkload -WorkloadType MSSQL -VaultId $SourceVault.ID | Where-Object { ($_.Name -match $SourceDB ) }
#Get Point in time
$PointInTime = Get-Date -Date "12/1/2023" -format MM/dd/yyyy
#Get Parameters
$Container = Get-AzRecoveryServicesBackupContainer -ContainerType AzureVMAppContainer -VaultId $($TargetVault.id) | Where-Object {$_.ServerName -eq "$SQLTargetServer" -and $_.HealthStatus -eq 'Healthy'}

$TargetInstance = Get-AzRecoveryServicesBackupProtectableItem -WorkloadType MSSQL -ItemType SQLInstance -ServerName "$SQLTargetServer" -VaultId $($TargetVault.id)

$PointBackup = Get-AzRecoveryServicesBackupRecoveryPoint  -Item $BackupItem | Where-object { $_.RecoveryPointTime -match $PointInTime }


# Configuration
$AnotherInstanceWithFullConfig = Get-AzRecoveryServicesBackupWorkloadRecoveryConfig -PointInTime $($PointBackup.RecoveryPointTime) -Item $BackupItem -TargetItem $SQLTargetInstance -Targetcontainer $Container -AlternateWorkloadRestore -VaultId $($SourceVault.ID)
$AnotherInstanceWithFullConfig.OverwriteWLIfpresent = "yes"
$AnotherInstanceWithFullConfig.RestoredDBName = $TargetDB


$AnotherInstanceWithFullConfig.targetPhysicalPath[0].TargetPath = ($AnotherInstanceWithFullConfig.targetPhysicalPath[0].TargetPath) -replace (($AnotherInstanceWithFullConfig.targetPhysicalPath[0].TargetPath | split-path -leaf), "$TargetDB).mdf")

$AnotherInstanceWithFullConfig.targetPhysicalPath[1].TargetPath = ($AnotherInstanceWithFullConfig.targetPhysicalPath[1].TargetPath) | ForEach-Object { $_ -replace (($AnotherInstanceWithFullConfig.targetPhysicalPath[1].TargetPath | split-path -leaf), "$TargetDB.ldf") -replace "I:", "L:" }

#restore
$restore = Restore-AzRecoveryServicesBackupItem -WLRecoveryConfig $AnotherInstanceWithFullConfig -VaultId $($TargetVault.id)

我有一个问题,我不知道如何解决。 (Doc女士,谷歌,ChatGPT,什么也没找到)

Restore-AzRecoveryServicesBackupItem:为调用提供的用户输入无效。请检查所需的输入

也许 $AnotherInstanceWithFullConfig ?

如果我启动:

$AnotherInstanceWithFullConfig | Format-list

结果如下:

目标服务器:SQLServer.domain 目标实例:实例 恢复数据库名称:目标数据库 TargetVirtualMachineId :/subscriptions/xxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/RSGXXXXXXXXXXXX/providers/Microsoft.Compute/virtualMachines/SQLServer 覆盖WLIfpresent:是 无恢复模式:禁用 目标物理路径:{名称_数据,名称_日志} ContainerId : /subscriptions/xxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/RSGXXXXXXXXX/providers/Microsoft.RecoveryServices/vaults/RSVXXXXXXXXXX/backupFabrics/Azure/protectionContainers/vmappcontainer;计算;rsgxxxxxxxx;SQlserver 完整RP: SourceResourceId :/subscriptions/xxxxxxxxxxxxxxxxxxxxxxxx/resourceGroups/RSGXXXXXXXXXXXX/providers/Microsoft.Compute/virtualMachines/SQLServer RestoreRequestType :备用 WL 恢复到差异项 恢复点:Microsoft.Azure.Commands.RecoveryServices.Backup.Cmdlets.Models.AzureWorkloadRecoveryPoint 时间点 : 12/1/2023 12:04:51 PM 恢复模式 : 文件路径:

有什么想法吗?

azure-powershell
1个回答
0
投票

Restore-AzRecoveryServicesBackupItem - 为调用提供的用户输入无效:

当传递到

Restore-AzRecoveryServicesBackupItem
的任何数据类型不符合预期时,可能会出现暂时性问题。再次检查配置对象
$AnotherInstanceWithFullConfig

还要确保您检查存储在每个变量中的输出正在检索每个步骤中的预期输出,如下所示。

enter image description here

并相应地验证

OverwriteWLIfpresent
对象中的
NoRecoveryMode
$AnotherInstanceWithFullConfig
的值以满足您的要求。

如果问题仍然存在,请使用

try catch
块获取更多相关错误信息。

© www.soinside.com 2019 - 2024. All rights reserved.