PowerShell从SQL Server提取文件出现0字节及GetBytes错误如何修复
错误原因
- 错误提示已经明确说明问题:你对
extension字段调用了GetBytes方法,这个字段是存储文件后缀名的字符串类型字段,本身不存储文件的二进制内容,所以读取失败,写出的文件自然是0字节。 - 你的SQL查询仅返回了
extension字段,没有返回存储文件内容的二进制字段,也是出错的核心原因。
修复步骤
- 先确认表
[XXXXXXXX].[dbo].[XXXXXXdocuments]中存储文件二进制内容的字段名,常见命名为content、file_binary、document_content等,和FILESTREAM绑定的字段也会是二进制类型,你可以查表结构确认正确字段名。 - 修改SQL查询语句,同时查询后缀名字段和二进制内容字段,示例如下(将
file_content替换为你实际的二进制字段名):
SELECT [extension], [file_content] FROM [XXXXXXXX].[dbo].[XXXXXXdocuments]
- 调整PowerShell中的读取逻辑:
- 原有读取后缀名作为文件名的逻辑
rd.GetString(0)不用修改 - 把所有调用
GetBytes的行里的第一个参数从0改成1,也就是把
修改为$received = $rd.Getbytes(0, $start, $out, 0, $bufferSize - 1);$received = $rd.Getbytes(1, $start, $out, 0, $bufferSize - 1);
- 原有读取后缀名作为文件名的逻辑
- 删除代码中无用的
enter code here占位行。 - 可选优化:建议查询时同时返回表的主键ID字段,将ID加入生成的文件名中,避免多个文件后缀相同时出现覆盖问题。
内容的提问来源于stack exchange,提问作者user17581125
相关产品推荐
相关产品推荐

