PowerShell查询SQL IF列= 0

时间:2018-12-11 19:46:07

标签: sql powershell

在这个方面,我有点不高兴,但是我想做的是让一个Web表单收集所有新用户信息,将其转储到表中,然后使用这些列填充数据我的PowerShell用户配置脚本。

我苦苦挣扎的部分是查询数据并将其放入PowerShell中的变量中。假设一个表具有基本的GivenName,SurName,Title等列。我想提取“已创建”列等于0的所有数据行(新用户),并将每一列放入一个变量中使用。在用户创建脚本的末尾,我将“ Created”(已创建)列更新为1,以避免下次批量运行时重新创建用户,但该行将保留。

有关实现此目标的最佳方法的任何提示吗?

1 个答案:

答案 0 :(得分:0)

因此,我们做了很多事情,以至于我们创建了一个函数,我们一直利用该函数将数据传入或传出SQL。

function Get-SQL ($query,$server,$database, $username, $password) {
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

if ($PSBoundParameters.ContainsKey('username') -eq $true -and $PSBoundParameters.ContainsKey('password') -eq $true) {
    $SqlConnection.ConnectionString = "Server = $server; Database = $database; User ID=$username; Password=$password;"
} else {
    $SqlConnection.ConnectionString = "Server = $server; Database = $database; Integrated Security = True"
}

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $query
$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet) | Out-Null
$SqlConnection.Close()

return $DataSet.Tables[0]
}

现在不要害怕所有的疯狂,只需将其放在脚本的顶部即可(我们实际上将其放在我们调用所有自动化脚本的全局函数库中,但是将其内联就可以了)

一旦有了该功能,您就可以执行以下操作:

$MyData = get-sql -server "MyServer" -database "MyDatabaseName" -Query "select * from myTable where created = 0"

然后,您将可以通过$ MyData对象访问所有列。但实际上,您将需要做一个foreach循环以真正处理每条记录。

foreach ($whatever in $myData) {
write-output "Now working on record: $($whatever.GivenName) $($whatever.SurName)"  
# Do more stuff you want

#now Update SQL
get-sql -server "MyServer" -database "MyDatabaseName" -Query "update myTable set created = 1 where UniqueUserID = '$($whatever.UniqueUserID)'"
}

最后要注意的是,您需要一个唯一的用户ID。可以是任何东西,这里我们总是使用Active Directory中的objectGUID,但如果没有,请在db中设置UserID字段,并使其自动递增一个int。您始终需要一个immutableID(意味着一个永远不会改变的东西,例如名称或电子邮件)。还要注意,在字符串中使用vars时,我总是使用$($ var)语法,当您的字符串用双引号引起来时可以使用,并且可以帮助避免问题。

这应该足以让您前进...祝您好运!