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

Ubuntu Docker容器中SMO Script执行失败问题求助

在Ubuntu Docker容器中执行PowerShell SMO Script方法时遇到资源文件缺失错误的解决办法

错误根源

报错核心是System.Resources.MissingManifestResourceException,说明SMO组件在Ubuntu Docker环境下缺少必要的本地化资源文件,导致Microsoft.SqlServer.Management.Smo.TypeConverters类型初始化失败,最终触发数据库脚本生成失败。

解决步骤

  • 安装跨平台兼容的SMO模块
    确保使用支持Linux环境的SqlServer模块版本,避免依赖Windows特定资源:

    Install-Module -Name SqlServer -AllowClobber -Force -Scope CurrentUser
    

    注意:容器内需使用PowerShell 7.x及以上版本,以兼容该模块。

  • 强制设置文化信息
    在脚本开头添加文化设置,强制使用英文(en-US)文化,避免因系统文化不匹配导致资源查找失败:

    # 强制设置当前线程文化为en-US
    [System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-US'
    [System.Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'
    
  • 补充缺失的资源文件(若上述步骤无效)

    1. 从NuGet包Microsoft.SqlServer.SqlManagementObjects中提取对应版本的资源文件,解压后获取en-US等资源文件夹;
    2. 将资源文件夹复制到Docker容器内SMO程序集的安装目录,通常路径为~/.local/share/powershell/Modules/SqlServer/<版本号>/lib/net6.0。
  • 验证.NET运行时环境
    跨平台SMO依赖.NET 6.0及以上版本,确保容器内已安装:

    apt-get update && apt-get install -y dotnet-runtime-6.0
    

修改后脚本示例

# 强制设置文化信息以避免资源查找失败
[System.Threading.Thread]::CurrentThread.CurrentCulture = 'en-US'
[System.Threading.Thread]::CurrentThread.CurrentUICulture = 'en-US'

foreach($x in $tb){
        Write-Host $x.Name
        $dbase = $x.Name

        ## GENERATE DB AND OBJECT SCRIPT FROM SOURCE SERVER.
        $nameConve = "$($destinationSVR)_$($dbase)"
        Write-Host $nameConve

        $SQLSrvObj = new-object "Microsoft.SqlServer.Management.Smo.Server" $sourceConn
               
        $SQLSrvObj.Information `
        | Select-Object parent, platform, product, productlevel, `
        OSVersion, Edition, version, HostPlatform, HostDistribution `
        | Format-List;
        
        $dbs = $SQLSrvObj.databases
        Write-Host $dbs
        $res = $dbs[$dbase].Script()

        Write-Host $res
}

内容的提问来源于stack exchange,提问作者Ten Uy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:20:43