我们遇到了与@divineops在问题中描述的类似情况,但我们希望每次构建应用程序(Angular + asp.net web api)时创建一个新的虚拟目录,以便可以测试多个应用程序版本,每个版本都位于其自己的版本化虚拟目录中。
因此,我们需要powershell脚本在devops运行发布管道时每次创建虚拟目录。
在设置由@iain-ward提供的脚本时,我们首先在Azure DevOps发布管道中遇到了一个错误,告诉我们要运行Login-AzureRmAccount命令。
在使用必要参数(即凭据)运行此命令后,我们得到了下一个错误:
Method 'get_SerializationSettings' in type 'Microsoft.Azure.Management.WebSites.WebSiteManagementClient' from assembly 'Microsoft.Azure.Management.Websites, Version=1.0.0.2, Culture=neutral, PublicKeyToken=31bf3856ad364e35' does not have an implementation.
为了解决这个错误,我最终将所有的AzureRm命令转换为Az命令,并且以下是最终成功完成从DevOps发布管道中创建虚拟目录任务的脚本:
$UserName = "<email>"
$Password = ConvertTo-SecureString "<password>" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential($UserName, $Password)
Login-AzAccount -Credential $Credential -SubscriptionName "<subscriptionName>" -TenantId "<tenantGuid>"
$website = Get-AzWebApp -Name "<appServiceName>" -ResourceGroupName "<resourceName>"
$VDApp = New-Object Microsoft.Azure.Management.WebSites.Models.VirtualApplication
$VDApp.VirtualPath = "/<virtualDirectory>"
$VDApp.PhysicalPath = "site\\wwwroot\\<physicalPath>"
$VDApp.PreloadEnabled ="NO"
$website.siteconfig.VirtualApplications.Add($VDApp)
$website | Set-AzWebApp
在“<>”中的所有项都是占位符,您需要用与您的帐户相关的值替换它们。
注意-我必须指定租户ID和订阅ID,因为我的帐户关联了多个,并且脚本无法选择将哪个设置为当前脚本会话的当前。
参考文献-基于这篇文章,我决定将所有AzureRm命令映射到Az命令,因为AzureRm已经过时了。