如果列=0,则PowerShell查询SQL
在这一点上我有点不知所措,但我正试图做的是让一个web表单收集我们所有的新用户信息,将其转储到表中,然后使用这些列填充PowerShell用户配置脚本的数据 我正在努力解决的部分是查询数据并将其放入PowerShell中的变量中。假设一个表包含基本的给定名称、姓氏、标题等列。我想提取“Created”列等于0的所有数据行(新用户),并将每一列放入一个变量中使用。在用户创建脚本结束时,我将“Created”列更新为1,以避免在下一次批处理运行时重新创建用户,但该行将保留如果列=0,则PowerShell查询SQL,sql,powershell,Sql,Powershell,在这一点上我有点不知所措,但我正试图做的是让一个web表单收集我们所有的新用户信息,将其转储到表中,然后使用这些列填充PowerShell用户配置脚本的数据 我正在努力解决的部分是查询数据并将其放入PowerShell中的变量中。假设一个表包含基本的给定名称、姓氏、标题等列。我想提取“Created”列等于0的所有数据行(新用户),并将每一列放入一个变量中使用。在用户创建脚本结束时,我将“Created”列更新为1,以避免在下一次批处理运行时重新创建用户,但该行将保留 关于这件事的最佳方法有什么
关于这件事的最佳方法有什么建议吗 所以我们经常这样做,以至于我们创建了一个函数,我们总是利用它来从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。您总是需要一个不可变的ID(意味着永远不会更改的东西,如名称或电子邮件)。另外请注意,在字符串中使用vars时,我始终使用$($var)语法,在字符串使用双引号时有效,可以帮助避免问题
这应该足够让你走了。。。祝你好运 那太完美了。漂亮,干净,容易理解。非常感谢。