无法在 Azure DevOps 中运行 Powershell 脚本

时间:2021-06-30 21:10:38

标签: azure powershell azure-devops azure-powershell

我有一个脚本,它创建连接到 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)

有什么想法吗? :(

0 个答案:

没有答案
相关问题