Итак, мы так много сделали, что создали функцию, которую мы всегда используем для ввода данных в 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)'"
}
Последнее, что нужно отметить, вам нужен уникальный идентификатор пользователя.Это может быть что угодно, здесь мы всегда используем objectGUID из Active Directory, но если у вас его нет, настройте поле UserID в БД и сделайте так, чтобы оно автоматически увеличивало int.Вы всегда хотите использовать immutableID (то есть то, что никогда не изменится, например, имя или адрес электронной почты).Также обратите внимание, что при использовании vars в строке я всегда использую синтаксис $ ($ var), работает, когда ваши строки заключены в двойные кавычки, и может помочь избежать проблем.
Этого должно быть достаточно, чтобы вы начали ... хорошоудачи!