Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果列=0,则PowerShell查询SQL_Sql_Powershell - Fatal编程技术网

如果列=0,则PowerShell查询SQL

如果列=0,则PowerShell查询SQL,sql,powershell,Sql,Powershell,在这一点上我有点不知所措,但我正试图做的是让一个web表单收集我们所有的新用户信息,将其转储到表中,然后使用这些列填充PowerShell用户配置脚本的数据 我正在努力解决的部分是查询数据并将其放入PowerShell中的变量中。假设一个表包含基本的给定名称、姓氏、标题等列。我想提取“Created”列等于0的所有数据行(新用户),并将每一列放入一个变量中使用。在用户创建脚本结束时,我将“Created”列更新为1,以避免在下一次批处理运行时重新创建用户,但该行将保留 关于这件事的最佳方法有什么

在这一点上我有点不知所措,但我正试图做的是让一个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)语法,在字符串使用双引号时有效,可以帮助避免问题


这应该足够让你走了。。。祝你好运

那太完美了。漂亮,干净,容易理解。非常感谢。