123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- #
- # SQLConnector.ps1
- #
- # Includes
- $PSScriptRoot = Split-Path -Parent -Path $MyInvocation.MyCommand.Definition
- . "$PSScriptRoot\Utility.ps1"
- Function Get-GlobalConfig{
- $sql = "SELECT * FROM [dbo].[GlobalConfig]"
- $returnedConfig = Invoke-SQL -connectionString $Config.SQLConnectionString -sqlCommand $sql
- return $returnedConfig;
- }
- Function Get-ServerConfig{
- $ret = Invoke-SQLProc -procName "GetServerConfig" -parameters @{"serverName" = $Config.ServerName}
- $row = ConvertTableTo-Object -table $ret
- $Config | Add-Member -MemberType NoteProperty –Name EndTime –Value $row.EndTime
- $Config | Add-Member -MemberType NoteProperty –Name ServerId –Value $row.Id
- $Config | Add-Member -MemberType NoteProperty –Name BatchSize –Value $row.BatchSize
- $Config | Add-Member -MemberType NoteProperty –Name NumberInstances –Value $row.NumberInstances
- $Config | Add-Member -MemberType NoteProperty –Name ServerActive –Value $row.IsActive
- $Config | Add-Member -MemberType NoteProperty –Name ServerComplete –Value $row.ServerComplete
- If(IsNull($Config.BatchSize) -or $Config.BatchSize -eq 0){
- $Config.BatchSize = 1
- }
- }
- Function Get-ActiveServers{
- $ret = Invoke-SQLProc -procName "GetActiveServers"
- return $ret
- }
- Function Get-ActiveInstances{
- param(
- [int] $serverId
- )
- $ret = Invoke-SQLProc -procName "GetActiveInstances" -parameters @{"serverId" = $serverId}
- return $ret
- }
- Function End-Instance{
- param(
- [int] $instanceId
- )
- $ret = Invoke-SQLProc -procName "EndInstance" -parameters @{"instanceId" = $instanceId}
- return $ret
- }
- Function Set-ScriptStart{
- $ret = Invoke-SQLProc -procName "LogScriptStart" -parameters @{"serverName" = $Config.ServerName}
-
- # Add to config object
- $Config | Add-Member -MemberType NoteProperty –Name InstanceId –Value $ret.Rows[0].ItemArray[0]
- }
- Function Set-ScriptEnd{
- param(
- [int] $instanceId,
- [int] $numProcessed,
- [int] $numErrors,
- [string] $exception = $null
- )
- $ret = Invoke-SQLProc -procName "LogScriptEnd" -parameters @{"instanceId" = $instanceId; "numberProcessed" = $numProcessed; "numberErrors" = $numErrors; "exception" = $exception}
- }
- Function Log-ServerComplete{
- param(
- [string] $serverName
- )
- $ret = Invoke-SQLProc -procName "LogServerComplete" -parameters @{"serverName" = $serverName}
- }
- Function Get-FileRow{
- param(
- [string] $mode
- )
-
- $table = Invoke-SQLProc -procName "SelectNextFileToProcess" -parameters @{"serverId" = $Config.ServerId; "scriptInstanceId" = $Config.InstanceId; "maxRetries" = $Config.MaxRetries; "mode" = $mode}
- $row = $null
- If($table -ne $null -and $table.Rows -ne $null -and $table.Rows.Count -gt 0){
- $row = ConvertTableTo-Object -table $table
- }
-
- return $row
- }
- Function Get-FileBatch{
- param(
- [string] $mode
- )
-
- $m = "Getting batch of: " + $Config.BatchSize.ToString() + " files"
- Write-Log -message $m -severity 4
- $table = Invoke-SQLProc -procName "SelectNextBatchToProcess" -parameters @{"serverId" = $Config.ServerId; "scriptInstanceId" = $Config.InstanceId; "maxRetries" = $Config.MaxRetries; "mode" = $mode; "batchSize" = $Config.BatchSize}
- $list = @()
- If($table -ne $null -and $table.Rows -ne $null -and $table.Rows.Count -gt 0){
- foreach($row in $table.Rows){
- $list += ConvertRowTo-Object -columns $table.Columns -row $row
- }
- }
-
- Write-Log -message "Got batch" -severity 4
- return $list
- }
- Function Update-FileRow{
- param(
- [int] $rowId,
- [int] $attemptCount,
- [string] $exception = $null,
- [int] $status,
- [string] $newfilename,
- [long] $newfilesize,
- [long] $originalfilesize,
- [string] $lastModifiedWhen,
- [string] $owner
- )
-
- $updated = Invoke-SQLProc -procName "UpdateFileRow" -parameters @{"rowId" = $rowId; "status" = $status; "attemptCount" = $attemptCount; "exception" = $exception; "newfilename" = $newfilename; "newfilesize" = $newfilesize; "originalfilesize" = $originalfilesize; "lastModifiedWhen" = $lastModifiedWhen; "owner" = $owner}
- Write-Log -severity 4 -message "Updated fileRow $rowId."
- }
- Function Update-FileRows{
- param(
- $batch
- )
- $sqlString = ""
- $params = @()
- $p = 0
- foreach($item in $batch){
-
- $exceptionParam = "@exception" + $p.ToString()
- $exceptionParamValue = $item.Exception
- $e = @{"name" = $exceptionParam; "value" = $exceptionParamValue}
- $params += $e
- $fileNameParam = "@fileName" + $p.ToString()
- $fileNameParamValue = $item.NewFileName
- $f = @{"name" = $fileNameParam; "value" = $fileNameParamValue}
- $params += $f
- $ownerParam = "@owner" + $p.ToString()
- $ownerParamValue = $item.Owner
- $o = @{"name" = $ownerParam; "value" = $ownerParamValue}
- $params += $o
- $origSizeParam = "@origSize" + $p.ToString()
- $origSizeParamValue = $item.OriginalFileSize
- $os = @{"name" = $origSizeParam; "value" = $origSizeParamValue}
- $params += $os
- $newSizeParam = "@newSize" + $p.ToString()
- $newSizeParamValue = $item.NewFileSize
- $ns = @{"name" = $newSizeParam; "value" = $newSizeParamValue}
- $params += $ns
- $modDateParam = "@lastModifiedWhen" + $p.ToString()
- $modDateParamValue = $item.LastModifiedWhen
- $mod = @{"name" = $modDateParam; "value" = $modDateParamValue}
- $params += $mod
- $attemptParam = "@attemptCount" + $p.ToString()
- $attemptParamValue = $item.AttemptCount
- $at = @{"name" = $attemptParam; "value" = $attemptParamValue}
- $params += $at
- $statusParam = "@status" + $p.ToString()
- $statusParamValue = $item.Status
- $st = @{"name" = $statusParam; "value" = $statusParamValue}
- $params += $st
- $sqlString += " ;UPDATE [Files] SET [CompletedWhen] = GETUTCDATE(), [Status] = $statusParam, [AttemptCount] = $attemptParam, [Exception] = $exceptionParam, [NewFileName] = $fileNameParam, [NewFileSize] = $newSizeParam, [OriginalFileSize] = $origSizeParam, [LastModifiedWhen] = $modDateParam, [Owner] = $ownerParam WHERE [Id] = " + $item.Id
-
- $p++
- }
-
- $updated = Invoke-SQLWithParams -sqlCommand $sqlString -params $params
- Write-Log -severity 4 -message "Updated Rows"
- }
- # ----------------------------------------------------------------------------------------------
- # SQL Utilities
- # ----------------------------------------------------------------------------------------------
- Function Open-SQLConnection{
- $connection = new-object system.data.SqlClient.SQLConnection($Config.SQLConnectionString)
- $connection.Open()
- Write-Log -severity 4 -message "Successfully connected to SQL Server"
- return $connection
- }
- Function Close-SQLConnection{
- $Conn.Close()
- $Conn.Dispose()
- Write-Log -severity 4 -message "SQL Connection Closed"
- }
- function Invoke-SQL {
- param(
- [string] $sqlCommand = $(throw "Please specify a query.")
- )
-
- $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$Conn)
- $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
- $dataset = New-Object System.Data.DataSet
- $adapter.Fill($dataSet) | Out-Null
-
- $message = ("Ran query: [$sqlCommand]. Returned " + $dataSet.Tables[0].Rows.Count.ToString() + " row(s).")
- Write-Log -severity 5 -message $message
- return $dataSet.Tables
- }
- function Invoke-SQLWithParams {
- param(
- [string] $sqlCommand = $(throw "Please specify a query."),
- $params = @()
- )
-
- $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$Conn)
- Foreach($param in $params){
- $command.Parameters.AddWithValue($param.name, $param.value)
- }
- $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
- $dataset = New-Object System.Data.DataSet
- $adapter.Fill($dataSet) | Out-Null
-
- $message = ("Ran query: [$sqlCommand]. Returned " + $dataSet.Tables[0].Rows.Count.ToString() + " row(s).")
- Write-Log -severity 5 -message $message
- return $dataSet.Tables
- }
- function Invoke-SQLProc {
- param(
- [string] $procName = $(throw "Please specify a stored procedure."),
- [hashtable] $parameters=@{}
- )
- $command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$Conn)
- $command.CommandType = [System.Data.CommandType]::StoredProcedure
- $command.CommandText = $procName
- $paramText = ""
- foreach($p in $parameters.Keys){
- $command.Parameters.AddWithValue("@$p",[string]$parameters[$p]).Direction = [System.Data.ParameterDirection]::Input
- $paramText += ($p + " = " + [string]$parameters[$p] + ", ")
- }
- $adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
- $dataset = New-Object System.Data.DataSet
- $adapter.Fill($dataSet) | Out-Null
- $message = ("Ran proc: [$procName] with parameters [$paramText]. Returned " + $dataSet.Tables[0].Rows.Count.ToString() + " row(s).")
- Write-Log -severity 5 -message $message
- return $dataSet.Tables
- }
- Function ConvertTableTo-Object {
- param(
- $table = $null
- )
- $row = @{}
- for($i = 0; $i -lt $table.Columns.Count; $i++){
- $colName = $table.Columns[$i]
- $val = $table.Rows[0].ItemArray[$i]
- $row | Add-Member -MemberType NoteProperty –Name $colName –Value $val
- }
- return $row
- }
- Function ConvertRowTo-Object {
- param(
- $columns = $null,
- $row = $null
- )
- $obj = @{}
- for($i = 0; $i -lt $columns.Count; $i++){
- $colName = $columns[$i]
- $val = $row.ItemArray[$i]
- $obj | Add-Member -MemberType NoteProperty –Name $colName –Value $val
- }
- return $obj
- }
|