Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 使用Azure CLI命令将本地bash脚本迁移到Azure DevOps中的Azure Powershell任务_Azure Devops_Azure Powershell_Azure Cli - Fatal编程技术网

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

Azure devops 使用Azure CLI命令将本地bash脚本迁移到Azure DevOps中的Azure Powershell任务,azure-devops,azure-powershell,azure-cli,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服务上的Powershell Azure任务中重用该功能,因为除了

我目前有一个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服务上的Powershell Azure任务中重用该功能,因为除了存储清理和上载之外,我还有很多其他的东西要做

迁移此文件的最佳方法是什么?一直在查看Powershell Azure模块文档,但我找不到与blob delete批处理和blob upload批处理相对应的适当版本

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

欢迎提出任何意见。提前谢谢

使用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实现它 动力壳

Azure PowerShell不提供这样的命令。它只提供命令集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实现它 动力壳 Azure PowerShell不提供可用于直接删除一个容器中所有blob的命令。所以我们需要编写一个脚本来实现它。现在,我们有两个选择

删除容器并使用相同的名称创建新容器 获取容器中的所有blob,然后删除它们
为什么不在Azure DevOps中使用Azure CLI任务,该任务为身份验证部分使用服务连接?请参阅文档。

AFAIK无法使用Azure RM模块批量上载文件,您必须逐个删除AzureStorageBlob,上载时必须在循环中使用Set-AzureStorageBlobContent。您可以参考,因为我不想重写Powershell脚本中的其他步骤来完全使用Az CLI任务,正如我在初始问题中提到的,您可以将正在使用的脚本拆分为A部分PS、B部分CLI和C部分PS??如果没有其他更好的方法来解决此问题。。。对重构到多个步骤是下一步,我会接受这个答案,因为它满足了所有的需求。不幸的是,正如我所认为的,使用Azure Powershell无法批量上传或删除blob。不过,我正在使用AzCopy命令测试此任务,至少是为了更好地执行上载。谢谢你的帮助@Jim Xu
$StorageAccountKey=" "
$StorageAccountName=" "
$ContainerName=" "
$context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
        Remove-AzureStorageContainer -Name $ContainerName -Context $context
        New-AzureStorageContainer -Name $ContainerName -Context $context
$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)