Skip to content

Commit f23a967

Browse files
committed
Updates
Fixed database conenction code Fixed SQL Insert statement Removed debug logging
1 parent d0abc14 commit f23a967

File tree

1 file changed

+44
-47
lines changed

1 file changed

+44
-47
lines changed

PSFramework/internal/loggingProviders/sql.provider.ps1

Lines changed: 44 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -27,41 +27,37 @@
2727
)
2828

2929
begin {
30-
#$SqlServer = Get-ConfigValue -Name 'Instance'
31-
$SqlServer = Get-PSFConfigValue -Name "PSFramework.Logging.Sql.SqlServer"
32-
$SqlDatabaseName = Get-PSFConfigValue -Name "PSFramework.Logging.Sql.LoggingDatabase"
30+
$SqlServer = Get-ConfigValue -Name 'SqlServer'
31+
$SqlTable = Get-ConfigValue -Name 'Table'
32+
$SqlDatabaseName = Get-ConfigValue -Name 'Database'
3333
}
3434

3535
process {
36-
3736
$QueryParameters = @{
38-
"LogMessage" = $ObjectToProcess.LogMessage
39-
"Level" = $ObjectToProcess.Level.ToString()
40-
"TimeStamp" = $ObjectToProcess.TimeStamp
37+
"Message" = $ObjectToProcess.LogMessage
38+
"Level" = $ObjectToProcess.Level -as [string]
39+
"TimeStamp" = $ObjectToProcess.TimeStamp.ToUniversalTime()
4140
"FunctionName" = $ObjectToProcess.FunctionName
4241
"ModuleName" = $ObjectToProcess.ModuleName
43-
"Tags" = $ObjectToProcess.Tags -join ","
44-
"Runspace" = $ObjectToProcess.Runspace
42+
"Tags" = $ObjectToProcess.Tags -join "," -as [string]
43+
"Runspace" = $ObjectToProcess.Runspace -as [string]
4544
"ComputerName" = $ObjectToProcess.ComputerName
4645
"TargetObject" = $ObjectToProcess.TargetObject -as [string]
47-
"ExecutedFile" = $ObjectToProcess.File -as [string]
46+
"File" = $ObjectToProcess.File
4847
"Line" = $ObjectToProcess.Line
4948
"ErrorRecord" = $ObjectToProcess.ErrorRecord -as [string]
50-
"CallStack" = $ObjectToProcess.CallStack.ToString()
49+
"CallStack" = $ObjectToProcess.CallStack -as [string]
5150
}
5251

53-
$insertQuery = @"
54-
INSERT INTO [LoggingDatabase].[dbo].[LoggingTable](LogMessage, Level, TimeStamp, FunctionName, ModuleName, Tags, Runspace, ComputerName, TargetObject, ExecutedFile, Line, ErrorRecord, CallStack)
55-
VALUES ('$($QueryParameters.LogMessage)', '$($QueryParameters.Level)', '$($QueryParameters.TimeStamp)', '$($QueryParameters.FunctionName)', '$($QueryParameters.ModuleName)', '$($QueryParameters.Tags)', '$($QueryParameters.Runspace)', '$($QueryParameters.ComputerName)', '$($QueryParameters.TargetObject)', '$($QueryParameters.ExecutedFile)', '$($QueryParameters.Line)', '$($QueryParameters.ErrorRecord)', '$($QueryParameters.CallStack)')
56-
"@
5752
try {
58-
$SqlInstance = Connect-DbaInstance -SqlInstance $SqlServer # Creates an SMO Server object that connects using Windows Authentication.
59-
if ($SqlInstance.Status -eq 'Offline')
60-
{ throw "$($SqlDatabaseName) is offline or unreachable." }
61-
elseif ($SqlInstance.ConnectionContext.IsOpen -ne 'True') {
53+
$SqlInstance = Connect-DbaInstance -SqlInstance $SqlServer
54+
if ($SqlInstance.ConnectionContext.IsOpen -ne 'True') {
6255
$SqlInstance.ConnectionContext.Connect() # Try to connect to the database
6356
}
64-
Invoke-DbaQuery -SqlInstance $SqlInstance -Database $SqlDatabaseName -Query $insertQuery -EnableException
57+
58+
$insertQuery = "INSERT INTO [LoggingDatabase].[dbo].[$SqlTable](Message, Level, TimeStamp, FunctionName, ModuleName, Tags, Runspace, ComputerName, TargetObject, [File], Line, ErrorRecord, CallStack)
59+
VALUES (@Message, @Level, @TimeStamp, @FunctionName, @ModuleName, @Tags, @Runspace, @ComputerName, @TargetObject, @File, @Line, @ErrorRecord, @CallStack)"
60+
Invoke-DbaQuery -SqlInstance $SqlInstance -Database $SqlDatabaseName -Query $insertQuery -SqlParameters $QueryParameters -EnableException
6561
}
6662
catch { throw }
6763
}
@@ -80,41 +76,41 @@ VALUES ('$($QueryParameters.LogMessage)', '$($QueryParameters.Level)', '$($Query
8076
#>
8177

8278
[cmdletbinding()]
83-
param()
79+
param(
80+
)
8481

85-
#if (-NOT (Test-Path -Path 'C:\Users\sifu1\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\LoggingDatabase')) {
86-
# New-Item -Name 'LoggingDatabase' -Path 'C:\Users\sifu1\AppData\Local\Microsoft\Microsoft SQL Server Local DB\Instances\' -ItemType Directory
87-
#}
82+
# need to use dba tools to create the database and credentials for connecting.
8883

89-
begin {
9084

91-
# Load the appropriate .NET assemblies used by SMO
92-
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.SqlServer.SMO')
85+
begin {
9386

9487
# set instance and database name variables
95-
$sqlInstance = "(localdb)\ProjectsV13"
88+
$Credential = Get-ConfigValue -Name 'Credential'
89+
$SqlServer = Get-ConfigValue -Name 'SqlServer'
90+
$SqlTable = Get-ConfigValue -Name 'Table'
91+
$SqlDatabaseName = Get-ConfigValue -Name 'Database'
92+
93+
$parameters = @{
94+
SqlInstance = $SqlServer
95+
}
96+
if ($Credential) { $parameters.SqlCredential = $Credential }
9697
}
9798
process {
9899
try {
99-
# Create the Sql object and database
100-
$database = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Database -Argumentlist $sqlInstance, $SqlDatabaseName
101-
$database.Create()
102-
# set recovery model
103-
$database.RecoveryModel = "simple"
104-
$database.Alter()
105-
106-
# Change the database owner
107-
$database.SetOwner('sa')
108-
109-
$createtable = "CREATE TABLE LoggingTable (LogMessage VARCHAR(max), Level VARCHAR(max), TimeStamp [DATETIME], FunctionName VARCHAR(max), ModuleName VARCHAR(max), Tags VARCHAR(max), Runspace VARCHAR(36), ComputerName VARCHAR(max), TargetObject VARCHAR(max), ExecutedFile VARCHAR(max), Line BIGINT, ErrorRecord VARCHAR(max), CallStack VARCHAR(max))"
110-
invoke-dbaquery -SQLInstance $SqlServer -Database "LoggingDatabase" -query $createtable
100+
$dbaconnection = Connect-DbaInstance @parameters
101+
if (-NOT (Get-DbaDatabase -SqlInstance $dbaconnection | Where-Object Name -eq $SqlDatabaseName)) {
102+
$database = New-DbaDatabase -SqlInstance $dbaconnection -Name $SqlDatabaseName
103+
}
104+
if (-NOT($database.Tables | Where-Object Name -eq $SqlTable)) {
105+
$createtable = "CREATE TABLE $SqlTable (Message VARCHAR(max), Level VARCHAR(max), TimeStamp [DATETIME], FunctionName VARCHAR(max), ModuleName VARCHAR(max), Tags VARCHAR(max), Runspace VARCHAR(36), ComputerName VARCHAR(max), TargetObject VARCHAR(max), [File] VARCHAR(max), Line BIGINT, ErrorRecord VARCHAR(max), CallStack VARCHAR(max))"
106+
Invoke-dbaquery -SQLInstance $SqlServer -Database $SqlDatabaseName -query $createtable
107+
}
111108
}
112109
catch {
113110
throw
114111
}
115112
}
116113
}
117-
118114
}
119115

120116
#region Installation
@@ -153,7 +149,7 @@ $isInstalled_script = {
153149
#endregion Installation
154150
#region Events
155151
$begin_event = {
156-
#New-DefaultSqlDatabaseAndTable
152+
New-DefaultSqlDatabaseAndTable
157153
}
158154

159155
$message_event = {
@@ -172,10 +168,10 @@ $final_event = {
172168

173169
# Configuration values for the logging provider
174170
$configuration_Settings = {
171+
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.Credential' -Initialize -Validation 'credential' -Description "SQL server database."
175172
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.Database' -Value "LoggingDatabase" -Initialize -Validation 'string' -Description "SQL server database."
176-
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.DatabaseTable' -Value "LoggingTable" -Initialize -Validation 'string' -Description "SQL server database table."
177-
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.SqlServer' -Value "(localdb)\ProjectsV13" -Initialize -Validation 'string' -Description "SQL server hosting logs."
178-
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.LogType' -Value "Message" -Initialize -Validation 'string' -Description "Log type we will log information to."
173+
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.Table' -Value "LoggingTable" -Initialize -Validation 'string' -Description "SQL server database table."
174+
Set-PSFConfig -Module PSFramework -Name 'Logging.Sql.SqlServer' -Value "" -Initialize -Description "SQL server hosting logs."
179175
}
180176

181177
# Registered parameters for the logging provider.
@@ -184,7 +180,7 @@ $paramRegisterPSFSqlProvider = @{
184180
Name = "Sql"
185181
Version2 = $true
186182
ConfigurationRoot = 'PSFramework.Logging.Sql'
187-
InstanceProperties = 'Database', 'DatabaseTable', 'SqlServer', 'LogType'
183+
InstanceProperties = 'Database', 'Table', 'SqlServer', 'Credential'
188184
MessageEvent = $message_Event
189185
BeginEvent = $begin_event
190186
FinalEvent = $final_event
@@ -194,7 +190,8 @@ $paramRegisterPSFSqlProvider = @{
194190
InstallationParameters = $installationParameters
195191
FunctionDefinitions = $functionDefinitions
196192
ConfigurationDefaultValues = @{
197-
LogType = 'Message'
193+
'Database' = "LoggingDatabase"
194+
'Table' = "LoggingTable"
198195
}
199196
}
200197

0 commit comments

Comments
 (0)