使用 Azure CLI 命令将本地 bash 脚本迁移到 Azure DevOps 中的 Azure Powershell 任务

Migrate local bash script with Azure CLI commands to Azure Powershell task in Azure DevOps

我目前有一个 bash 脚本,它运行一些 az 命令来清理存储帐户容器并将目录的内容上传到其中:

az storage blob delete-batch --account-name $ACCOUNT_NAME --source $web
az storage blob upload-batch --account-name $ACCOUNT_NAME -s $SOURCE_PATH -d $web

我想在 Azure DevOps Services 上运行的 Powershell Azure 任务中重用该功能,因为除了存储清理和上传之外,该脚本还有很多其他内容。

最好的迁移方法是什么?一直在查看 Powershell Azure 模块文档,但找不到 blob delete-batchblob upload-batch.

的合适等价物

此外,虽然直接调用 az 命令但为此我必须登录,所以我需要一种方法在执行这些行之前将服务主体详细信息从 Powershell Azure 任务传递到 az login 命令.

欢迎任何想法。提前致谢

use Azure PowerShell to login Azure with service principal

您可以使用以下脚本

$appId = "your application id "
$password = "your application secret"
$secpasswd = ConvertTo-SecureString $password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($appId, $secpasswd)

Add-AzureRmAccount -Credential $mycreds -Tenant "your tenat id" -ServicePrincipal

I can use Azure CLI command "az storage blob upload-batch" to upload a local directory to Azure storage. How to implement it with Azure PowerShell

Azure PowerShell 不提供这样的命令。它只是提供命令 Set-AzureStorageBlobContent 以允许客户将文件上传到 Azure 存储。所以你需要写一个脚本,用命令来实现如何上传一个目录到Azure存储。例如

$StorageAccountKey=" "
$sourceFileRootDirectory=" "
$StorageAccountName=" "
$ContainerName=" "
$ctx = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
$container = Get-AzureStorageContainer -Name $ContainerName -Context $ctx

 if ($container) {
        $filesToUpload = Get-ChildItem $sourceFileRootDirectory -Recurse -File

        foreach ($x in $filesToUpload) {
            $blobName = ($x.fullname.Substring($sourceFileRootDirectory.Length + 1)).Replace("\", "/")

            Set-AzureStorageBlobContent -File $x.fullname -Container $container.Name -Blob $blobName -Context $ctx -Force:$Force 
        }
}

I can use Azure CLI command "az storage blob delete-batch" to clean up a container. How to implement it with Azure PowerShell Azure PowerShell does not provide the command that we can use to directly delete all blob in one container. So we need to write a script to implement it. Now, we have two choices

  1. 删除容器并创建同名的新容器
$StorageAccountKey=" "
$StorageAccountName=" "
$ContainerName=" "
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
        Remove-AzureStorageContainer -Name $ContainerName -Context $context
        New-AzureStorageContainer -Name $ContainerName -Context $context
  1. 获取容器中的所有 blob,然后删除它们
$StorageAccountKey=" "
$StorageAccountName=" "
$ContainerName=" "
$Token = $null
$Total = 0
$MaxCount=5000
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
do
 { 
     $Blobs = Get-AzureStorageBlob -Container $ContainerName -MaxCount $MaxCount  -ContinuationToken $Token -Context $context
     if($Blobs.Length -le 0) { Break;}
     $Token = $Blobs[$blobs.Count -1].ContinuationToken;

     foreach($blob in $blobs){
        Remove-AzStorageBlob -Blob $blob.Name -Container $ContainerName -Context $context

     }


 }
 While ($Token -ne $null)  

为什么不在 Azure DevOps 中使用将服务连接用于身份验证部分的 Azure CLI 任务?请参阅文档 here