如何使用Powershell从远程zip文件部署functionapp

时间:2019-07-06 15:12:25

标签: azure powershell

我想使用一个zip文件在一个zure中部署一个功能应用程序,该文件位于另一个使用powershell的azure blob存储中。 我尝试过以下方法

#PowerShell
$username = "<deployment_user>"
$password = "<deployment_password>"
$filePath = "https://xxxxx.blob.core.windows.net/container/zzzz.zip"
$apiUrl = "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f 
$username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath - ContentType "multipart/form-data"

但是我收到了以下错误消息,例如

  

Invoke-RestMethod:找不到驱动器。名称为“ https”的驱动器不存在。

如何从远程url文件进行部署?

2 个答案:

答案 0 :(得分:1)

由于Invoke-RestMethod InFile接受文件中的内容,因此需要先明确下载blob内容。

选项1

$fileUrl = "https://xxxxx.blob.core.windows.net/container/zzzz.zip"
$token = 'sp=r&st=2019-07-06T21:41:45Z&se=2019-07-07T05:41:45Z&spr=https&sv=2018-03-28&sig=9ud%2FiJ6GBccxZfyrKsZtP69lwuralu1D0QiiESa%2FXgo%3D&sr=b'
$filePath = [System.IO.Path]::GetFileName($fileUrl)
Invoke-WebRequest ('{0}?{1}' -f $fileUrl, $token) -OutFile $filePath  
  

先决条件

     

需要提供SAS (Shared Access Signature) URI而不是资源网址   其中包含用于执行已验证的SAS令牌   请求

选项2

通过Azure Storage Cmdlets

$StorageAccountName = 'yourstorageaccount'
$StorageAccountKey = Get-AzureStorageKey -StorageAccountName $StorageAccountName
$StorageContext = New-AzureStorageContext $StorageAccountName -StorageAccountKey $StorageAccountKey.Primary
$FileName = 'zzzz.zip'
$OutputPath = 'C:\Temp'
$ContainerName  = 'yourcontainer'
Get-AzureStorageBlobContent -Blob $FilebName -Container $ContainerName -Destination $OutputPath -Context $StorageContext

答案 1 :(得分:0)

Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method POST -InFile $filePath - ContentType "multipart/form-data"
  

-InFile $ filePath

param需要本地文件路径。

检查文档: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-6

使用类似的东西:

  1. 首先,从Azure存储下载blob。
  2. 转换为字节流。
  3. 设置为您的请求(正文)的一部分。

供参考的样本代码:

$base64Image = [convert]::ToBase64String((get-content $path -encoding byte))

Invoke-WebRequest -uri $uri -Method Post -Body $base64Image -ContentType "application/base64"