如何通过PowerShell Runbook在Azure Blob Storage中创建文本文件
Set-AzStorageBlobContent 命令参数补全及使用说明
你之前执行
echo "test" > test.txt没有成功的原因是,这个命令只是在PowerShell Runbook的运行沙箱本地写入了文件,并没有和Azure Blob Storage产生交互,文件会随着Runbook运行结束沙箱销毁而消失,不会自动上传到Blob存储。
你需要补充两个核心必选参数,根据你的使用场景还可以选填其他优化参数:
-File <本地文件路径>:指定要上传的本地源文件的路径,适用于你已经提前生成好本地文本文件的场景-Blob <Blob端文件名>:指定文件上传到Blob容器后的保存名称,支持嵌套路径写法(如doc/test.txt会自动在容器下创建doc逻辑目录存放文件)-InputStream <流对象>:如果不想生成临时本地文件,直接上传内存中的内容,可以用这个参数替代-File参数
场景1:已有本地test.txt文件直接上传
完整命令如下:
$ctx = New-AzStorageContext -StorageAccountName "test123" -UseConnectedAccount Set-AzStorageBlobContent -Container "test_files" -Context $ctx -File "./test.txt" -Blob "test.txt"
场景2:直接在Runbook中生成文本内容上传(无需提前生成本地文件)
方法A:通过Runbook临时目录中转(写法简单)
# 写入内容到Runbook沙箱临时目录 $textContent = "test" $tempFile = Join-Path $env:TEMP "test.txt" Set-Content -Path $tempFile -Value $textContent -Encoding UTF8 # 上传到Blob存储 $ctx = New-AzStorageContext -StorageAccountName "test123" -UseConnectedAccount Set-AzStorageBlobContent -Container "test_files" -Context $ctx -File $tempFile -Blob "test.txt"
方法B:通过内存流直接上传(无临时文件生成)
# 把文本内容转成UTF8内存流 $textContent = "test" $contentStream = [System.IO.MemoryStream]::new([System.Text.Encoding]::UTF8.GetBytes($textContent)) # 上传流内容到Blob $ctx = New-AzStorageContext -StorageAccountName "test123" -UseConnectedAccount Set-AzStorageBlobContent -Container "test_files" -Context $ctx -InputStream $contentStream -Blob "test.txt" # 释放流资源 $contentStream.Dispose()
可选优化参数
可以添加-Properties参数指定文件的Content-Type,避免访问时出现乱码:
Set-AzStorageBlobContent -Container "test_files" -Context $ctx -File $tempFile -Blob "test.txt" -Properties @{ContentType = 'text/plain; charset=utf-8'}
内容的提问来源于stack exchange,提问作者Yoshihide Suga
相关产品推荐
相关产品推荐

