Powershell中带有资源管理器的Azure发布Web应用

时间:2018-11-08 18:37:57

标签: azure powershell azure-web-sites azure-resource-manager azure-cloud-shell

我正在尝试在Azure上的应用程序服务上发布Web应用程序包。 我需要创建一个Powershell脚本以从Cloud Shell运行,以便发布该软件包。 我写了以下代码

Import-AzurePublishSettingsFile - $WebApp.PublishProfilePath
Publish-AzureWebsiteProject -Package $WebApp.ZipPath -Name $WebApp.WebAppName

此代码可在我的本地计算机上运行,​​但不能在出现以下错误的Cloud Shell中使用:

Import-AzurePublishSettingsFile : The term 'Import-AzurePublishSettingsFile' 
is not recognized as the name of a cmdlet, function, script file, or 
operable program.

Publish-AzureWebsiteProject : The term 'Publish-AzureWebsiteProject' is not 
recognized as the name of a cmdlet, function, script file, or operable 
program.

我猜这些错误是由于这些cmdlet来自旧的Classic Manager(在Cloud Shell中不可用)造成的。

基本上,我需要使用脚本从Cloud Shell发布 Web应用程序包。我该如何实现?我还有其他选择吗?

2 个答案:

答案 0 :(得分:2)

您要遵循的步骤和命令是用于ASM(经典)网站部署的。

Shell是否只能具有ARM模块,而没有具有这些命令的模块。

检查下面的链接,看看是否适合您。

https://docs.microsoft.com/en-us/azure/app-service/app-service-deploy-zip

希望这会有所帮助。

答案 1 :(得分:2)

从Hannel建议的文档链接开始,我终于通过invoking REST API with Powershell解决了。使用Azure CLI更加容易,但是我已经用Powershell编写了一个更复杂的脚本。

最终代码是这样的:

# Getting credentials
$creds = Invoke-AzureRmResourceAction -ResourceGroupName $resourceGroupName `
    -ResourceType Microsoft.Web/sites/config `
    -ResourceName "$($WebApp.WebAppName)/publishingcredentials" `
    -Action list `
    -ApiVersion 2015-08-01 `
    -Force

$username = $creds.Properties.PublishingUserName
$password = $creds.Properties.PublishingPassword
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))

# Deploy Web App
Invoke-RestMethod -Uri "https://$($WebApp.WebAppName).scm.azurewebsites.net/api/zipdeploy" `
    -Headers @{Authorization = ("Basic {0}" -f $base64AuthInfo)} `
    -Method POST `
    -InFile $WebApp.ZipPath `
    -ContentType "multipart/form-data"  `
    -UseBasicParsing `
    -ErrorAction Stop | Out-Null