如何在PowerShell中无需Invoke-sqlcmd及sqlserver模块执行SQL脚本(SQL身份验证)
无需SQLServer模块实现PowerShell SQL身份验证执行SQL脚本
场景:需要在PowerShell中运行SQL脚本,工作电脑无管理员权限无法安装SQLServer模块,只能使用SQL身份验证,而多数方案依赖
Invoke-SqlCmd或Windows身份验证,寻求替代方案。
解决方案
直接利用.NET框架内置的System.Data.SqlClient类库实现,无需安装任何额外模块,只需在连接字符串中配置SQL身份验证的账号密码即可。
代码示例
执行查询类SQL脚本
# 替换为你的SQL脚本内容 $sqlScript = @" SELECT * FROM YourTargetTable; "@ # 配置SQL身份验证连接字符串 $connectionString = "Server=你的数据库服务器地址;Database=目标数据库名称;User ID=SQL登录账号;Password=SQL登录密码;Trusted_Connection=False;" try { # 初始化数据库连接 $dbConnection = New-Object System.Data.SqlClient.SqlConnection($connectionString) $dbConnection.Open() # 创建SQL命令对象 $sqlCommand = New-Object System.Data.SqlClient.SqlCommand($sqlScript, $dbConnection) # 使用SqlDataAdapter填充结果到DataSet $dataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($sqlCommand) $dataSet = New-Object System.Data.DataSet $dataAdapter.Fill($dataSet) | Out-Null # 输出查询结果 $dataSet.Tables[0] | Format-Table -AutoSize } catch { Write-Error "执行SQL脚本失败: $_" } finally { # 确保数据库连接关闭 if ($dbConnection.State -eq 'Open') { $dbConnection.Close() } }
执行非查询类SQL脚本(如INSERT/UPDATE/DELETE)
如果是执行不需要返回结果的脚本,可以改用ExecuteNonQuery()方法:
# 替换为你的非查询SQL脚本 $sqlScript = "INSERT INTO YourTargetTable (Column1, Column2) VALUES ('Value1', 'Value2');" # 连接字符串配置同上 $connectionString = "Server=你的数据库服务器地址;Database=目标数据库名称;User ID=SQL登录账号;Password=SQL登录密码;Trusted_Connection=False;" try { $dbConnection = New-Object System.Data.SqlClient.SqlConnection($connectionString) $dbConnection.Open() $sqlCommand = New-Object System.Data.SqlClient.SqlCommand($sqlScript, $dbConnection) $affectedRows = $sqlCommand.ExecuteNonQuery() Write-Host "脚本执行完成,影响行数: $affectedRows" } catch { Write-Error "执行SQL脚本失败: $_" } finally { if ($dbConnection.State -eq 'Open') { $dbConnection.Close() } }
关键说明
Trusted_Connection=False是核心配置,明确指定使用SQL身份验证而非Windows集成身份验证- 所有操作依赖.NET内置类,无需管理员权限安装任何模块
- 脚本执行过程中记得捕获异常,避免连接未正常关闭
内容的提问来源于stack exchange,提问作者Red And Black
相关产品推荐
相关产品推荐

