通过PSSession

时间:2016-01-22 14:48:28

标签: powershell azure

我正在尝试自动从我的本地计算机上传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}

出现同样的错误。对这个问题的任何帮助都很好,谢谢。

1 个答案:

答案 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设置为私有时才有效 - 如果您需要限制对文件的访问权限,则无效:(