Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 角色启动时从Azure Blob存储下载.exe的Powershell脚本失败:文件大小为0KB_.net_Powershell_Azure_Azure Storage Blobs - Fatal编程技术网

.net 角色启动时从Azure Blob存储下载.exe的Powershell脚本失败:文件大小为0KB

.net 角色启动时从Azure Blob存储下载.exe的Powershell脚本失败:文件大小为0KB,.net,powershell,azure,azure-storage-blobs,.net,Powershell,Azure,Azure Storage Blobs,使用2012年6月版本的SDK和emulator,我尝试在Azure worker角色上安装Java运行时可执行文件,如下示例: 我已将x64安装程序作为blob上传,并将其重命名为“Java.exe”(只是为了让文件名看起来更简单): 当我检查时,我可以看到blob在那里,并且大小正确(31MB) 下面的示例中,我将使用以下启动任务: <Startup> <Task commandLine="Run.cmd" executionContext="elevated"

使用2012年6月版本的SDK和emulator,我尝试在Azure worker角色上安装Java运行时可执行文件,如下示例:

我已将x64安装程序作为blob上传,并将其重命名为“Java.exe”(只是为了让文件名看起来更简单):

当我检查时,我可以看到blob在那里,并且大小正确(31MB)

下面的示例中,我将使用以下启动任务:

<Startup>
    <Task commandLine="Run.cmd" executionContext="elevated" taskType="background" />
</Startup>
依次调用此powershell脚本:

function download_from_storage ($container, $blob, $connection, $destination) {
Add-Type -Path ((Get-Location).Path + '\Microsoft.WindowsAzure.StorageClient.dll')
$storageAccount = [Microsoft.WindowsAzure.CloudStorageAccount]::Parse($connection)
$blobClient = New-Object Microsoft.WindowsAzure.StorageClient.CloudBlobClient($storageAccount.BlobEndpoint, $storageAccount.Credentials)   
$remoteBlob = $blobClient.GetBlobReference($container + '/' + $blob)
$remoteBlob.DownloadToFile($destination + "\" + $blob)
}

$connection_string = 'DefaultEndpointsProtocol=https;AccountName=devstoreaccount1; AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw=='

# JRE
$jre = 'Java.exe'
download_from_storage 'startuputil' $jre $connection_string (Get-Location).Path
这是可行的,如果我浏览到emulator在本地磁盘上创建的approt,我可以在那里看到Java.exe,但是它的文件大小是0KB,运行它失败,错误是“不是有效的Win32应用程序”

显然,下载正在开始,但出于某种原因,它似乎没有完成。有人能告诉我为什么吗

我想知道它是否与此问题有关:,但对我们的live storage帐户运行它也会以完全相同的方式失败


我应该补充一点,我是一个经验丰富的C#程序员,但对powershell知之甚少,所以我或多或少会逐行遵循这个示例。我并不是真的在寻找一种解决方法——通过将此文件包含在项目中并将其设置为“始终复制”来打包此文件非常简单,但对于其他更大的文件,我需要这种技术,因此如果可能的话,我希望它能够正常工作。

尝试指定如下连接字符串:

$connection_string = 'UseDevelopmentStorage=true'
希望这能有所帮助。

(将我的评论转换为答案)


我相信错误消息可能意味着容器不存在。您确定“startuputil”是您创建的容器的正确名称吗?

否-它仍然失败。正如我上面所说的,如果我使用我们的live storage帐户,它也会失败。嗯……真奇怪。我基本上是从上面复制代码,并在我的计算机上作为PowerShell脚本运行,而不是作为角色中的启动任务运行。您可以尝试自己运行Launch.ps1 PowerShell脚本吗?只需启动PowerShell控制台。导航到包含此PS文件的目录并执行“\Launch.ps1”。这将告诉您PowerShell脚本是否有任何错误。使用“1”参数调用“DownloadToFile”时出现异常:“put中的一个请求超出范围。”在D:\Work\CLIENTS\PageEngine\Solutions\PageEngine\Azure\csx\Debug\roles\FontRo le\approot\Launch.ps1:6 char:31+$remoteBlob.DownloadToFile此错误来自存储客户端库。原因可能很多,但主要原因是其中一个参数无效。你能发布更新的PowerShell脚本吗?我还没有更新脚本。刚刚尝试了“UseDevelopmentStorage=true”,然后切换回原来的版本。谢谢,史蒂夫。我是powershell的笨蛋。请注意,该错误消息可能会提供更多信息。。。
$connection_string = 'UseDevelopmentStorage=true'