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