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

向SQL操作传递变量:跨库同步用户停用状态执行失败

问题原因

你的代码不生效的核心原因是PowerShell的字符串插值规则限制:在双引号包裹的字符串(包括Here字符串)中,直接写$user.samaccountname时,PowerShell只会解析$user变量本身,不会自动解析后续的属性调用,.samaccountname会被当做普通字符串拼接进SQL语句,导致WHERE条件匹配不到任何用户,更新自然不生效。你可以在生成$update变量后输出其内容,就能看到生成的WHERE条件中UserID的值并不是你期望的用户ID。

解决方法
  • 方法1:快速修复字符串插值问题
    使用子表达式运算符$()包裹属性调用,强制PowerShell完整解析属性值,修正后的代码如下:
    foreach($user in $unity){
        if ($user.SamAccountName -in ($ica.userid))
        {
            $update = @"
            USE IRWSDB
            UPDATE IRUser
            SET Active = 0
            WHERE UserID = '$($user.samaccountname)'
    

"@
# 后续执行$update的逻辑保持不变即可
}
}

- 方法2(更安全推荐):使用参数化查询
直接拼接SQL字符串存在SQL注入风险,建议改用参数化查询执行更新操作,无需处理字符串插值问题,示例逻辑如下:
```powershell
# 假设你已经初始化了SqlConnection对象$conn并打开了连接
foreach($user in $unity){
    if ($user.SamAccountName -in ($ica.userid))
    {
        $cmd = New-Object System.Data.SqlClient.SqlCommand
        $cmd.Connection = $conn
        $cmd.CommandText = "USE IRWSDB UPDATE IRUser SET Active = 0 WHERE UserID = @UserId"
        $cmd.Parameters.AddWithValue("@UserId", $user.samaccountname) | Out-Null
        $cmd.ExecuteNonQuery()
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:24:07