我有一个脚本,它创建连接到 VM 的磁盘的快照,然后复制到另一个区域并从中创建一个磁盘,这作为内联脚本工作,但是当我在 Azure DevOps 中作为 Azure Powershell 脚本运行它时从回购,它失败
At D:\a\r1\a\_repo\drop\snapshot-copy.ps1:108 char:38
+ } until ($status -eq "Success")
+ ~~
The string is missing the terminator: ".
At D:\a\r1\a\_repo\drop\snapshot-copy.ps1:59 char:35
+ foreach ($snapshot in $snapshots) {
+ ~
Missing closing '}' in statement block or type definition.
PowerShell exited with code '1'.
脚本有两部分,首先创建有效的快照(下)
$resourceGroupName = 'sourcerg'
$location = 'westeurope'
$ManagedDiskResourceGroup = "dstdisk-rg"
$dstLocation = "north Europe"
$storageaccountdr = "strgdestvhd2021"
$storageaccountdrblob = "vhd"
$SnapshotResourceGroup = "destination-rg"
$vm = Get-AzVM -ResourceGroupName $resourceGroupName
foreach ($v in $vm) {
$snapshot = New-AzSnapshotConfig `
-SourceUri $v.StorageProfile.OsDisk.ManagedDisk.Id `
-Location $location `
-CreateOption copy -Verbose
$ss = $v.Name
$ssName = "$ss-osdisk"
New-AzSnapshot `
-Snapshot $snapshot `
-SnapshotName $ssName `
-ResourceGroupName $resourceGroupName -Verbose
$dataDisks = ($v.StorageProfile.DataDisks).name
foreach ($datadisk in $datadisks) {
$dataDisk = Get-AzDisk `
-ResourceGroupName $ResourceGroupName `
-DiskName $datadisk
Write-Output "VM $($vm.name) data Disk $($datadisk.Name) Snapshot Begin"
$DataDiskSnapshotConfig = New-AzSnapshotConfig `
-SourceUri $dataDisk.Id `
-CreateOption Copy `
-Location $location
$snapshotNameData = "$($datadisk.name)_snapshot_$(Get-Date -Format ddMMyy)"
New-AzSnapshot `
-ResourceGroupName $ResourceGroupName `
-SnapshotName $snapshotNameData `
-Snapshot $DataDiskSnapshotConfig `
-ErrorAction Stop
Write-Output "VM $($vm.name) data Disk $($datadisk.Name) Snapshot End"
}
}
以下部分失败
$storageaccountdrkey = (Get-AzStorageAccountKey `
-Name $storageaccountdr `
-ResourceGroupName $snapshotresourcegroup).value[0]
$snapshots = Get-AzSnapshot `
-ResourceGroupName $resourceGroupName | ?{($_.TimeCreated) -gt ([datetime]::UtcNow.Addhours(-12))}
foreach ($snapshot in $snapshots) {
Write-Output "Granting $($snapshot.name) access"
$snapshotaccess = Grant-AzSnapshotAccess `
-ResourceGroupName $resourceGroupName `
-SnapshotName $snapshot.Name -DurationInSecond 1800 `
-Access Read -ErrorAction stop -Verbose
Write-Output "$($snapshot.name) access granted"
$DestStorageContext = New-AzStorageContext `
–StorageAccountName $storageaccountdr `
-StorageAccountKey $storageaccountdrkey `
-ErrorAction stop
$vhdname = $($snapshot.name).Substring(0,$($snapshot.name).Length-9)
Write-Output "Begin snapshot: ($($snapshot.name)) copy to $vhdname.vhd"
Start-AzStorageBlobCopy `
-AbsoluteUri $snapshotaccess.AccessSAS `
-DestContainer $storageaccountdrblob `
-DestContext $DestStorageContext `
-DestBlob "$($vhdname).vhd" `
-Force -ErrorAction stop
Write-Output "snapshot: ($($snapshot.name)) copy to $vhdname.vhd completed"
$storageaccountid = Get-AzStorageAccount `
-Name $storageaccountdr `
-ResourceGroupName $snapshotresourcegroup
$diskuri = "https://$($storageaccountdr).blob.core.windows.net/$($storageaccountdrblob)/$($vhdname).vhd"
$storageType = 'Premium_LRS'
Write-Output "Creating managed disk: $vhdname"
$diskConfig = New-AzDiskConfig `
-AccountType $storageType `
-Location $dstLocation `
-CreateOption Import `
-StorageAccountId $storageaccountid.id `
-SourceUri $diskuri `
-OsType Windows `
-Verbose
$time = Get-Date
do
{
$status = (Get-AzStorageBlobCopyState `
-Blob "$vhdname.vhd" `
-Container "vhd-cont" `
-Context $DestStorageContext).Status
sleep -Seconds 120
} until ($status -eq "Success")
New-AzDisk -Disk $diskConfig `
-ResourceGroupName $ManagedDiskResourceGroup `
-DiskName $vhdname `
-ErrorAction stop -Verbose
Write-Output "managed disk: $vhdname created"
}
我看不出我做错了什么,因为它作为内联脚本工作,这个问题似乎与
sleep -Seconds 120
} until ($status -eq "Success")
谁能看出我做错了什么?我在 Azure DevOps 中使用最新版本的 Powershell。
提前致谢
编辑:
内联脚本部署失败,错误:
TFS.WebApi.Exception: 503: error
at g (https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:79:623)
at https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:79:3718
at nt (https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:79:887)
at https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:79:3650
at l (https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:33:8126)
at https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:33:8352
at t.when (https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:33:3784)
at t.u.promiseDispatch (https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:33:2828)
at https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:33:1653
at MessagePort.t (https://cdn.vsassets.io/bundles/vss-bundle-common-vKfxZuj32xwrvhB4ZfuMmqcJoxJ1nxtCCBRlgV94N2ZY=:33:5777)
有什么想法吗? :(