internal/scripts/postimport.ps1

# Add all things you want to run after importing the main code

# Load Configurations
foreach ($file in (Get-ChildItem "$ModuleRoot\internal\configurations\*.ps1")) {
    . Import-ModuleFile -Path $file.FullName
}

# load app stuff and create files if needed
$script:localapp = Get-DbcConfigValue -Name app.localapp
$script:maildirectory = Get-DbcConfigValue -Name app.maildirectory

if (-not (Test-Path -Path $script:localapp)) {
    New-Item -ItemType Directory -Path $script:localapp
}

if (-not (Test-Path -Path $script:maildirectory)) {
    New-Item -ItemType Directory -Path $script:maildirectory
}

# Parse repo for tags and descriptions then write json
$repos = Get-CheckRepo
$collection = $groups = $repofiles = @()
foreach ($repo in $repos) {
    $repofiles += (Get-ChildItem "$repo\*.Tests.ps1" | Where-Object { $_.Name -ne 'MaintenanceSolution.Tests.ps1' })
}

foreach ($file in $repofiles) {
    $gets = Select-String -InputObject $file -Pattern 'Get-SqlInstance|Get-ComputerName'
    $filename = $file.Name.Replace(".Tests.ps1", "")
    $groups += $filename
    $strings = Get-Content $file | Where-Object { $_ -match "-Tags" }
    foreach ($string in $strings) {
        $rawtype = $gets | Where-Object { $_.LineNumber -gt $string.ReadCount } | Sort-Object LineNumber | Select-Object -First 1
        
        if ($rawtype -match "Get-SqlInstance") {
            $type = "Sqlinstance"
        }
        if ($rawtype -match "Get-ComputerName") {
            $type = "ComputerName"
        }
        if ($null -eq $rawtype) {
            $type = $null
        }
        
        $describe = Select-String -InputObject $string -Pattern 'Describe\ \"[\s]*(.+)[\s]*\"\ \-Tags' | ForEach-Object { $_.matches.Groups[1].Value }
        $tags = Select-String -InputObject $string -Pattern '-Tags[\s]*(.+)[\s]*\, \$filename' | ForEach-Object { $_.matches.Groups[1].Value }
        if ($filename -eq "HADR" -and $type -eq $null) { $type = "ComputerName" }
        $collection += [pscustomobject]@{
            Group         = $filename
            Type          = $type
            Description   = $describe
            UniqueTag     = $null
            AllTags       = "$tags, $filename"
        }
    }
}

$olanames = @()
$olanames += [pscustomobject]@{ Description = 'Ola System Full Backup'; prefix = 'OlaSystemFull' }
$olanames += [pscustomobject]@{ Description = 'Ola System Full Backup'; prefix = 'OlaUserFull' }
$olanames += [pscustomobject]@{ Description = 'Ola User Diff Backup'; prefix = 'OlaUserDiff' }
$olanames += [pscustomobject]@{ Description = 'Ola User Log Backup'; prefix = 'OlaUserLog' }
$olanames += [pscustomobject]@{ Description = 'Ola CommandLog Cleanup'; prefix = 'OlaCommandLog' }
$olanames += [pscustomobject]@{ Description = 'Ola System Integrity Check'; prefix = 'OlaSystemIntegrityCheck' }
$olanames += [pscustomobject]@{ Description = 'Ola User Integrity Check'; prefix = 'OlaUserIntegrityCheck' }
$olanames += [pscustomobject]@{ Description = 'Ola User Index Optimize'; prefix = 'OlaUserIndexOptimize' }
$olanames += [pscustomobject]@{ Description = 'Ola Output File Cleanup'; prefix = 'OlaOutputFileCleanup' }
$olanames += [pscustomobject]@{ Description = 'Ola Delete Backup History'; prefix = 'OlaDeleteBackupHistory' }
$olanames += [pscustomobject]@{ Description = 'Ola Purge Job History'; prefix = 'OlaPurgeJobHistory' }

foreach ($olaname in $olanames) {
    $collection += [pscustomobject]@{
        Group          = 'MaintenanceSolution'
        Type           = 'Sqlinstance'
        Description    = $olaname.Description
        UniqueTag      = $olaname.Prefix
        AllTags        = "$($olaname.Prefix), MaintenanceSolution"
    }
}

$singletags = ($collection.AllTags -split ",").Trim() | Group-Object | Where-Object { $_.Count -eq 1 -and $_.Name -notin $groups }
foreach ($check in $collection) {
    $unique = $singletags | Where-Object { $_.Name -in ($check.AllTags -split ",").Trim() }
    $check.UniqueTag = $unique.Name
}
ConvertTo-Json -InputObject $collection | Out-File "$script:localapp\checks.json"

# Load Tab Expansion
foreach ($file in (Get-ChildItem "$ModuleRoot\internal\tepp\*.ps1")) {
    . Import-ModuleFile -Path $file.FullName
}

# Importing PSDefaultParameterValues
$PSDefaultParameterValues = $global:PSDefaultParameterValues

# Set default param values if it exists
if ($credential = (Get-DbcConfigValue -Name app.sqlcredential)) {
    if ($PSDefaultParameterValues) {
        $newvalue = $PSDefaultParameterValues += @{ '*:SqlCredential' = $credential }
        Set-Variable -Scope 0 -Name PSDefaultParameterValues -Value $newvalue
    }
    else {
        Set-Variable -Scope 0 -Name PSDefaultParameterValues -Value @{ '*:SqlCredential' = $credential }
    }
}

# EnableException so that failed commands cause failures
$PSDefaultParameterValues += @{ '*-Dba*:EnableException' = $true }

# Fred magic
# Set-PSFTaskEngineCache -Module dbachecks -Name module-imported -Value $true
# SIG # Begin signature block
# MIINEAYJKoZIhvcNAQcCoIINATCCDP0CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUyp6JntZC+lGi3tdW1xAOKgC/
# 4dWgggpSMIIFGjCCBAKgAwIBAgIQAsF1KHTVwoQxhSrYoGRpyjANBgkqhkiG9w0B
# AQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD
# VQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFz
# c3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMB4XDTE3MDUwOTAwMDAwMFoXDTIwMDUx
# MzEyMDAwMFowVzELMAkGA1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMQ8wDQYD
# VQQHEwZWaWVubmExETAPBgNVBAoTCGRiYXRvb2xzMREwDwYDVQQDEwhkYmF0b29s
# czCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAI8ng7JxnekL0AO4qQgt
# Kr6p3q3SNOPh+SUZH+SyY8EA2I3wR7BMoT7rnZNolTwGjUXn7bRC6vISWg16N202
# 1RBWdTGW2rVPBVLF4HA46jle4hcpEVquXdj3yGYa99ko1w2FOWzLjKvtLqj4tzOh
# K7wa/Gbmv0Si/FU6oOmctzYMI0QXtEG7lR1HsJT5kywwmgcjyuiN28iBIhT6man0
# Ib6xKDv40PblKq5c9AFVldXUGVeBJbLhcEAA1nSPSLGdc7j4J2SulGISYY7ocuX3
# tkv01te72Mv2KkqqpfkLEAQjXgtM0hlgwuc8/A4if+I0YtboCMkVQuwBpbR9/6ys
# Z+sCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZldQ5Y
# MB0GA1UdDgQWBBRcxSkFqeA3vvHU0aq2mVpFRSOdmjAOBgNVHQ8BAf8EBAMCB4Aw
# EwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDovL2Ny
# bDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGGL2h0
# dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3JsMEwG
# A1UdIARFMEMwNwYJYIZIAYb9bAMBMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3
# LmRpZ2ljZXJ0LmNvbS9DUFMwCAYGZ4EMAQQBMIGEBggrBgEFBQcBAQR4MHYwJAYI
# KwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcwAoZC
# aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3VyZWRJ
# RENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQAD
# ggEBANuBGTbzCRhgG0Th09J0m/qDqohWMx6ZOFKhMoKl8f/l6IwyDrkG48JBkWOA
# QYXNAzvp3Ro7aGCNJKRAOcIjNKYef/PFRfFQvMe07nQIj78G8x0q44ZpOVCp9uVj
# sLmIvsmF1dcYhOWs9BOG/Zp9augJUtlYpo4JW+iuZHCqjhKzIc74rEEiZd0hSm8M
# asshvBUSB9e8do/7RhaKezvlciDaFBQvg5s0fICsEhULBRhoyVOiUKUcemprPiTD
# xh3buBLuN0bBayjWmOMlkG1Z6i8DUvWlPGz9jiBT3ONBqxXfghXLL6n8PhfppBhn
# daPQO8+SqF5rqrlyBPmRRaTz2GQwggUwMIIEGKADAgECAhAECRgbX9W7ZnVTQ7Vv
# lVAIMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdp
# Q2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNVBAMTG0Rp
# Z2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xMzEwMjIxMjAwMDBaFw0yODEw
# MjIxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNI
# QTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUA
# A4IBDwAwggEKAoIBAQD407Mcfw4Rr2d3B9MLMUkZz9D7RZmxOttE9X/lqJ3bMtdx
# 6nadBS63j/qSQ8Cl+YnUNxnXtqrwnIal2CWsDnkoOn7p0WfTxvspJ8fTeyOU5JEj
# lpB3gvmhhCNmElQzUHSxKCa7JGnCwlLyFGeKiUXULaGj6YgsIJWuHEqHCN8M9eJN
# YBi+qsSyrnAxZjNxPqxwoqvOf+l8y5Kh5TsxHM/q8grkV7tKtel05iv+bMt+dDk2
# DZDv5LVOpKnqagqrhPOsZ061xPeM0SAlI+sIZD5SlsHyDxL0xY4PwaLoLFH3c7y9
# hbFig3NBggfkOItqcyDQD2RzPJ6fpjOp/RnfJZPRAgMBAAGjggHNMIIByTASBgNV
# HRMBAf8ECDAGAQH/AgEAMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEF
# BQcDAzB5BggrBgEFBQcBAQRtMGswJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRp
# Z2ljZXJ0LmNvbTBDBggrBgEFBQcwAoY3aHR0cDovL2NhY2VydHMuZGlnaWNlcnQu
# Y29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENBLmNydDCBgQYDVR0fBHoweDA6oDig
# NoY0aHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9v
# dENBLmNybDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
# QXNzdXJlZElEUm9vdENBLmNybDBPBgNVHSAESDBGMDgGCmCGSAGG/WwAAgQwKjAo
# BggrBgEFBQcCARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAKBghghkgB
# hv1sAzAdBgNVHQ4EFgQUWsS5eyoKo6XqcQPAYPkt9mV1DlgwHwYDVR0jBBgwFoAU
# Reuir/SSy4IxLVGLp6chnfNtyA8wDQYJKoZIhvcNAQELBQADggEBAD7sDVoks/Mi
# 0RXILHwlKXaoHV0cLToaxO8wYdd+C2D9wz0PxK+L/e8q3yBVN7Dh9tGSdQ9RtG6l
# jlriXiSBThCk7j9xjmMOE0ut119EefM2FAaK95xGTlz/kLEbBw6RFfu6r7VRwo0k
# riTGxycqoSkoGjpxKAI8LpGjwCUR4pwUR6F6aGivm6dcIFzZcbEMj7uo+MUSaJ/P
# QMtARKUT8OZkDCUIQjKyNookAv4vcn4c10lFluhZHen6dGRrsutmQ9qzsIzV6Q3d
# 9gEgzpkxYz0IGhizgZtPxpMQBvwHgfqL2vmCSfdibqFT+hKUGIUukpHqaGxEMrJm
# oecYpJpkUe8xggIoMIICJAIBATCBhjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMM
# RGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQD
# EyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQgSUQgQ29kZSBTaWduaW5nIENBAhACwXUo
# dNXChDGFKtigZGnKMAkGBSsOAwIaBQCgeDAYBgorBgEEAYI3AgEMMQowCKACgACh
# AoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAM
# BgorBgEEAYI3AgEVMCMGCSqGSIb3DQEJBDEWBBQCrAY/jejjoFA91QKR6rfZYnqB
# dDANBgkqhkiG9w0BAQEFAASCAQCJd5Q1TPLY132L91W/JMY1kKnQm/gJ+tbt+8qO
# Qaf3pzz64vM6btUSajT1CeGWis2NXSFDBM47eIqpWSY2lluzu8o/13TW8jq3xjL/
# DqgjzkuWG1nNAz9MKPndSyLLRLYOsYilbF9/VV8OUDUXJSnKcV8KK1WGzBBT0298
# joEQhGfdiB2W2cwVZ/VUFc8u4icCTt51Q7suipHgnhdmqVZkMUEWHAOkBaRJT2eV
# gtvQAyYOETKYMwjwr5lK40LHHOlbO5/EKsfAeE9PVRqvw6KVXwoCHbUoXdYz77M4
# vN3izzOiQ+xOa3c9ptwDEcDTjegNbp0Ea+74XQDDSBseHOXj
# SIG # End signature block