我有一个非常简单的“hello world”类型函数。在run.ps1
中$request = Invoke-RestMethod http://ipinfo.io/json | Select -ExpandProperty ip
$out = "$env:TEMP\zhello.txt"
Set-Content -value $request -path $out
Out-File -Encoding ASCII $out
和function.json有这个:
{
"type": "apiHubFile",
"name": "outputFile",
"path": "output_{file}",
"connection": "onedrive_ONEDRIVE",
"direction": "out"
}
它成功运行且没有错误,但该文件不在我的OneDrive中。还尝试使用Azure Blob Storage作为输出。我的代码出了什么问题?
答案 0 :(得分:0)
看起来您的Out-File
命令没有任何值写入$out
文件路径。它可能正在删除由Set-Content
创建的文件。
尝试发表评论Set-Content
,然后改用$request | Out-File -Encoding ASCII $out
。
如果仍然无法解决问题,请确保您的第一行实际检索数据并将其分配给$request
,就像您认为的那样。
修改强>
您也可以尝试将$out
写入主机,以确保您确切知道它放置文件的位置。实现这些建议会呈现以下代码:
$request = "hello world"
$out = "$env:TEMP\zhello.txt"
Write-Host $out
$request | Out-File -Encoding ASCII $out
这会为我生成预期的文件。
如果仍然无效,请通过尝试"hello world 2" > "$env:TEMP\zhello.txt"
答案 1 :(得分:0)
我发现以下帖子有助于回答我原来的问题:Outputting a file with an Azure Function
我的 run.ps1 现在看起来像这样:
$request = "hello world"
$filename = "$env:TEMP\zhello.txt"
$request | Out-File $filename
$base64string = [Convert]::ToBase64String([IO.File]::ReadAllBytes($filename))
$response = ConvertTo-JSON @{
Body=$base64string;
Headers=@{
# unfortunately it seems functions does not support 'filename=...'
'Content-Disposition'='attachment';
# you would use application/octet-stream, but because it's converted to JSON you lose binary content
'Content-Type'='text/plain';
};
}
Out-File -Encoding Ascii -FilePath $outputFile -inputObject $response
文件确实放入我的OneDrive,但它的内容只是这个
{
"Headers": {
"Content-Type": "text/plain",
"Content-Disposition": "attachment"
},
"Body": "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA=="
}
现在我可以使用“Body”并在本地创建文件:
$encodedText = "//5oAGUAbABsAG8AIAB3AG8AcgBsAGQADQAKAA=="
$Content = [System.Convert]::FromBase64String($encodedText)
Set-Content -Path $env:temp\my-file.txt -Value $Content -Encoding Byte
但这违背了该功能的目的,我不妨在本地运行所有内容,因为我需要在本地运行这个“解码”代码段。
编辑:
经过一些测试后,我发现之前我无法输出文件的主要原因是我的function.json使用默认值{file}。一旦我将其硬编码为“zhello.txt”,我就在OneDrive中获得了该文件,其中包含$ response指定的内容。不过,我需要找出一种动态指定outputFile名称的方法(在我的run.ps1中)。