You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell处理Azure存储Excel子表转CSV:上传至Blob文件夹B遇阻

解决PowerShell中CSV文件上传到Azure Blob存储文件夹B的问题

嘿,我正好碰到过类似的场景,来帮你把生成的CSV文件传到Blob的B文件夹!既然你已经搞定了Excel读取和转CSV的步骤,那剩下的上传部分其实很清晰,咱们一步步来:

第一步:确认Azure存储上下文已连接

首先得确保你的PowerShell会话已经和目标Azure存储账户建立连接。如果还没连接,先运行这些命令(替换成你的存储账户信息):

# 连接到Azure账户(如果还未登录)
Connect-AzAccount

# 创建存储账户上下文,用账户名和密钥
$storageAccountName = "你的存储账户名"
$storageAccountKey = "你的存储账户密钥"
$ctx = New-AzStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey

# 要是用SASToken的话,换成下面这行:
# $sasToken = "你的SASToken"
# $ctx = New-AzStorageContext -StorageAccountName $storageAccountName -SasToken $sasToken

注:现在微软推荐用Az模块(Az.Storage),老的AzureRM模块已经弃用了,如果你还在用Start-AzureStorageBlobCopy,把下面命令里的Az换成AzureRM就行。

第二步:上传本地CSV文件到Blob的B文件夹

假设你把转换好的CSV文件都存在本地某个文件夹里,咱们遍历这些文件,逐个上传到Blob的虚拟文件夹B中:

# 本地CSV文件所在的文件夹路径
$localCsvFolder = "C:\你的CSV文件存放路径"
# Blob存储的容器名称
$containerName = "你的容器名"
# Blob中的目标虚拟文件夹
$targetFolder = "B"

# 获取所有CSV文件
$csvFiles = Get-ChildItem -Path $localCsvFolder -Filter "*.csv"

foreach ($file in $csvFiles) {
    # 构建目标Blob的完整名称(虚拟文件夹+文件名)
    $targetBlobName = "$targetFolder/$($file.Name)"
    
    # 上传本地文件到Blob
    Start-AzStorageBlobCopy -SrcFilePath $file.FullName -DestContainer $containerName -DestBlob $targetBlobName -Context $ctx
    
    # 可选:等待当前文件上传完成再继续下一个
    Get-AzStorageBlobCopyState -Container $containerName -Blob $targetBlobName -Context $ctx -WaitForComplete
    
    Write-Host "已上传文件:$($file.Name) 到 $targetBlobName"
}

如果你是在内存中生成的CSV(没存本地)

要是你转换CSV时直接在内存里生成了内容,没保存到本地文件,那可以用Set-AzStorageBlobContent直接上传内存流:

# 假设$csvContent是你生成的CSV字符串内容
$csvContent = "列1,列2`n值1,值2`n值3,值4"
$targetBlobName = "B/自定义文件名.csv"

# 把字符串转成内存流
$stream = [System.IO.MemoryStream]::new()
$writer = [System.IO.StreamWriter]::new($stream)
$writer.Write($csvContent)
$writer.Flush()
$stream.Position = 0

# 上传流到Blob
Set-AzStorageBlobContent -Container $containerName -Blob $targetBlobName -Stream $stream -Context $ctx

# 记得清理资源
$writer.Dispose()
$stream.Dispose()

几个要注意的点

  • 确保你的Azure账户有Blob数据参与者或更高的权限,不然会上传失败;
  • 用SASToken的话,要确保Token包含**写入(w)**权限;
  • Blob里的虚拟文件夹不需要提前创建,上传时会自动根据Blob名称生成;
  • 如果上传后看不到文件夹,刷新一下Blob存储的界面就行,虚拟文件夹只是Blob名称的一部分,不是真实的文件夹结构。

内容的提问来源于stack exchange,提问作者Mukesh Sakre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:49:44