PowerShell Query SQL IF Column = 0 - PullRequest
       1

PowerShell Query SQL IF Column = 0

0 голосов
/ 11 декабря 2018

Я немного не справился с этой задачей, но я пытаюсь сделать так, чтобы веб-форма собрала всю информацию о наших новых пользователях, поместила ее в таблицу и использовала эти столбцы для заполнения данных.для моих пользовательских сценариев PowerShell.

Часть, с которой я борюсь, - это запрос данных и их передача в переменные в PowerShell.Предположим, что таблица содержит основные столбцы «Имя», «Имя», «Заголовок» и т. Д.Я хочу получить все строки данных (новых пользователей), для которых столбец «Создан» равен 0, и поместить каждый столбец в переменную для использования.В конце сценария создания пользователя я обновлю столбец «Создано» до 1, чтобы избежать повторного создания пользователя при следующем пакетном запуске, но строка останется.

Любые советы о том, как лучше всего двигаться дальшеоб этом?

1 Ответ

0 голосов
/ 12 декабря 2018

Итак, мы так много сделали, что создали функцию, которую мы всегда используем для ввода данных в 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), работает, когда ваши строки заключены в двойные кавычки, и может помочь избежать проблем.

Этого должно быть достаточно, чтобы вы начали ... хорошоудачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...