我正在尝试自动从我的本地计算机上传blob到Azure存储,然后在我设置的Azure VM上下载blob。我已经配置了所有内容,我可以在本地运行脚本来上传blob。然后我可以RDP进入Azure VM并运行和其他脚本下载blob。完善!
我的问题是尝试使用PSSession或Invoke-Command在我的本地计算机上完成所有这些操作。我可以成功启动到Azure VM的PSSession
Enter-PSSession -ComputerName <myMachine>.cloudapp.net -Port 8888 -Credential username/password -UseSSL
然而,当我尝试运行Azure命令时,例如通过PSSession
Get-AzureStorageBlob -Container $containerName -Context $context
我收到了错误。
The term 'Get-AzureStorageBlobContent' is not recognized as the name of a
cmdlet, function, script file, or operable program.
虽然我可以RDP到Azure VM并正常运行这些命令,但一切正常。 (我在两台机器上都安装了Azure Powershell SDK)我也尝试过创建一个New-PSSession然后使用
Invoke-Command -Session $myNewSession -ScriptBlock {my script}
出现同样的错误。对这个问题的任何帮助都很好,谢谢。
答案 0 :(得分:0)
所以,经过更多的研究。看来答案很简单。
Enter-PSSession仅用于交互模式,不适用于脚本。解决这个问题的方法是创建一个New-PSSession,然后将其与Invoke-Command
一起使用此外,Azure为您的blob文件提供下载Uri,因此您只需调用和Web请求即可,无需运行Azure命令
实施例
$session = New-PSSession -ComputerName <myMachine>.cloudapp.net -Port 8888 -Credential user/pass -UseSSL
Invoke-Command -Session $session -ScriptBlock { Invoke-WebRequest -Uri https://<myBlobFile>.blob.core.windows.net/container/file.zip -OutFile C:\path\on\remote\machine }
我希望这可以帮助其他人解决这个问题
编辑:这仅在您的blob设置为私有时才有效 - 如果您需要限制对文件的访问权限,则无效:(