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

PowerShell调用Invoke-Sqlcmd获取数据库用户名报FileNotFoundException错误求助

PowerShell调用Invoke-Sqlcmd报FileNotFoundException的解决方法

报错根本原因

该错误是当前PowerShell环境缺失SqlServer官方PowerShell模块,或旧版SQL Server组件依赖不完整导致的,另外你提供的原代码也存在参数填写错误的问题。

解决步骤

方案1:使用官方Invoke-Sqlcmd(需要安装模块)

  • 以管理员权限启动PowerShell,执行以下命令检查是否已安装SqlServer模块:
    Get-Module -ListAvailable SqlServer
    如果没有返回任何模块信息,执行安装命令:
    Install-Module -Name SqlServer -Force -AllowClobber
    如果提示不受信任的仓库,输入Y确认继续即可,离线环境可以提前下载模块包拷贝到$env:PSModulePath对应的目录下完成安装。
  • 验证模块安装成功,执行导入命令无报错即可:
    Import-Module SqlServer
  • 修正原代码的参数错误:原参数-ServerInstance的格式应为「服务器地址\实例名」,不能直接拼接数据库名,数据库需要单独通过-Database参数指定,修正后的完整代码如下:
$query = "select * from sys.database_principals"
# 替换对应参数的实际值,如需账号密码登录可增加 -Username、-Password 参数
$databases = Invoke-Sqlcmd -Query $query `
    -ServerInstance "你的服务器名\你的SQL实例名" `
    -Database "你的目标数据库名" `
    -SuppressProviderContextWarning
# 转换为DataTable格式
$resultDataTable = $databases | ConvertTo-DataTable

方案2:无依赖原生实现(不需要安装任何模块)

如果不想额外安装模块,可以直接调用.NET内置的SQLClient类实现查询,零依赖:

# 替换为实际的数据库连接串,如需账号密码登录修改连接串配置即可
$connectionString = "Server=你的服务器名\实例名;Database=你的目标数据库名;Integrated Security=True;"
$query = "select * from sys.database_principals"
$resultDataTable = New-Object System.Data.DataTable

$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
try {
    $connection.Open()
    $command = New-Object System.Data.SqlClient.SqlCommand($query, $connection)
    $adapter = New-Object System.Data.SqlClient.SqlDataAdapter($command)
    $adapter.Fill($resultDataTable) | Out-Null
}
finally {
    $connection.Close()
    $connection.Dispose()
}

执行完成后直接使用$resultDataTable即可获取查询结果的DataTable对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:01