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

时间:2019-08-21 10:16:04

标签: azure-devops azure-powershell azure-cli

我目前有一个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命令中。 / p>

任何想法都欢迎。预先感谢

2 个答案:

答案 0 :(得分:1)

  

使用Azure PowerShell通过服务主体登录Azure

您可以使用以下脚本

$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
  

我可以使用Azure CLI命令“ az storage blob upload-batch”上传    本地目录到Azure存储。如何使用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 
        }
}
  

我可以使用Azure CLI命令“ az storage blob delete-batch”进行清理    一个容器。如何使用Azure实施    PowerShell   Azure PowerShell没有提供可用于直接删除一个容器中所有blob的命令。因此,我们需要编写一个脚本来实现它。现在,我们有两个选择

  1. 删除容器并创建一个具有相同名称的新容器
$StorageAccountKey=" "
$StorageAccountName=" "
$ContainerName=" "
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
        Remove-AzureStorageContainer -Name $ContainerName -Context $context
        New-AzureStorageContainer -Name $ContainerName -Context $context
  1. 获取容器中的所有斑点,然后将其删除
$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)  

答案 1 :(得分:0)

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