从AD传递的Powershell和SQL字符串

Tho*_*ong 0 sql string powershell literals

好的,这是一个有趣的.我将尝试简化问题在Powershell中,假设我使用以下内容:

$users = Get-ADUser | Select samAccountName, givenName, sn
Run Code Online (Sandbox Code Playgroud)

Active Directory示例有3个用户:

First Name    Last Name
__________    _________
Jen           Jones
Jason         O'Neil
Jake          Johnson
Run Code Online (Sandbox Code Playgroud)

我在powershell中有一个SQL Update命令来更新一个看起来像这样的表:

ForEach($U in $Users){

$SQLAddInfo = "
              UPDATE
                  Table1
              SET
                  User_Last_Name = '$($User.sn)',
                  User_First_Name = '$($User.givenName)'  
              WHERE
                  User_ID = '$($User.samAccountName)'"

$SqlConnection.Open()
$SqlCmd.CommandText = $SQLaddInfo
$SqlCmd.Connection = $SqlConnection
$SqlCmd.ExecuteNonQuery()
$SqlConnection.Close()
}
Run Code Online (Sandbox Code Playgroud)

现在问题是这大部分时间都有效,但是当我到达O'Neil的姓氏时,SQL认为撇号是SQL命令的终结符.我如何在这里使用变量,仍然有Powershell或SQL忽略撇号?

Joe*_*orn 5

参数化查询.还有别的,奥尼尔远非你唯一的问题.

....一天后回来,因为我忘了谈论Table-Valued参数.

如果Get-ADUser这里的调用产生1000个结果,那么你将运行1000个SQL查询,这并不好玩.您可以通过表值参数一步将所有数据发送到服务器来做得更好,您可以在其中执行使用该参数仅运行一个查询的INSERT/SELECT .