VConnectSqlDb.psm1


# Instal Pre-Req Modules

Invoke-InstallOrUpdateModule 'SqlServer'

function Get-VConnectDbDeployments {
    param($name, $dbName, [int] $top = 100) 
    $query = "SELECT TOP ($top) [DeploymentId]
      ,[DeploymentName]
      ,[OwnerId]
      ,[OwnerEmailId]
      ,[StatusString]
      ,[Status]
      ,[Message]
      ,[Exception]
      ,[CreatedOn]
      ,[StartTime]
      ,[CompletedTime]
      ,[AssignedAgentId]
      ,[ResourceId]
      ,[ResourceType]
      ,[ResourceName]
      ,[DeploymentRequestId]
      ,[UpdatedTime]
  FROM [dbo].[Deployments]"


  Invoke-SqlDbQuery $name $query $dbName

}

function Get-VConnectAuditLogsForSubscriptions {
    param(
        [Parameter(Mandatory = $true, Position = 0, HelpMessage = "VConnect db connection name; Please use Add-SqlDbConnection to create new connection.")]
        $connectionName,
        [Parameter(Mandatory = $true, Position = 1, HelpMessage = "Specify one or more subscription id as comma separated value.")]
        $subscriptionIds,
        [Parameter(Mandatory = $false, Position = 2)]
        $dbName,
        [Parameter(Mandatory = $false, Position = 3)]
        $startTimeInUtc, 
        [Parameter(Mandatory = $false, Position = 4)]
        $endTimeInUtc,
        [Parameter(Mandatory = $false, Position = 5)]
        $outputFileName,
        [Parameter(Mandatory = $false, Position = 6)]
        $outputFilePath,
        [Switch]$exportCsv, [Switch]$printToConsole, [Switch] $gridView
    )

    [System.Collections.ArrayList]$subscriptionIdsIn = $subscriptionIds -split ','
    [System.Collections.ArrayList]$subscriptionIdsList = @()
    foreach($sub in $subscriptionIdsIn)
    {
        $subscription = $sub.Trim()
        $subscriptionIdsList.Add("'$subscription'")
    }

    $subscriptionIdsString = $subscriptionIdsList -Join ','

    $query = "SELECT * FROM [dbo].[Calllogs] WITH (nolock) WHERE [SubscriptionId] in ($subscriptionIdsString)"

    if($startTimeInUtc)
    {
        $query = $query + " AND [TimeStamp] >= '$startTimeInUtc'" 
    }
    
    if($endTimeInUtc)
    {
        $query = $query + " AND [TimeStamp] <= '$endTimeInUtc'"
    }

    try
    {
        $result = $null
        $sqlDbConn = Get-SqlDbConnection $connectionName
        if($dbName -eq $null) {
            $dbName = $sqlDbConn.DbName
        }

        if([string]::IsNullOrWhiteSpace($dbName))
        {
            $dbName = Read-Host 'DB Name'
        }

        $result = Invoke-SqlDbQuery -name $connectionName -query $query -dbName $dbName -printToConsole
        if(!$result)
        {
            Write-Output "No logs found for Subscription Id(s) $subscriptionIdsString."
        }
        elseif ($exportCsv)
        {
            $dateTimeTicks = (Get-Date).Ticks
            $outFileName = 'VConnectAuditLogs_'+ $dateTimeTicks +'.csv'
            if($outputFileName)
            {
                $outFileName = $outputFileName
            }

            if($outputFilePath)
            {
                if($outputFilePath -notmatch '\\$')
                {
                    $outputFilePath = $outputFilePath + '\'
                }
                if(Test-Path -Path $outputFilePath)
                {
                    $outFileName = $outputFilePath + $outFileName
                }
                else
                {
                    Write-Error "Output file path specified is invalid or not accessible."
                }
            }

            Write-Host "Writing to File: $($outFileName)"
            $result | Export-Csv -Path $outFileName -NoTypeInformation
        }
        elseif ($printToConsole)
        {
            $result
        }
        else
        {
            $result | Out-GridView
        }
    }
    catch {
        $exception = $_
        Write-Host "Get VConnect audit logs for subscription id(s) {$subscriptionIdsString} failed."
        Write-Error $exception
    }
}
# SIG # Begin signature block
# MIIQQAYJKoZIhvcNAQcCoIIQMTCCEC0CAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU1/7QSJKgbHW606c2QVtVSNjN
# XSagggz8MIIGcjCCBFqgAwIBAgIIZDNR08c4nwgwDQYJKoZIhvcNAQELBQAwfDEL
# MAkGA1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgw
# FgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBD
# ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwNjI0MjA0NDMwWhcNMzEw
# NjI0MjA0NDMwWjB4MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNV
# BAcMB0hvdXN0b24xETAPBgNVBAoMCFNTTCBDb3JwMTQwMgYDVQQDDCtTU0wuY29t
# IENvZGUgU2lnbmluZyBJbnRlcm1lZGlhdGUgQ0EgUlNBIFIxMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAn4MTc6qwxm0hy9uLeod00HHcjpdymuS7iDS0
# 3YADxi9FpHSavx4PUOqebXjzn/pRJqk9ndGylFc++zmJG5ErVu9ny+YL4w45jMY1
# 9Iw93SXpAawXQn1YFkDc+dUoRB2VZDBhOmTyl9dzTH17IwJt83XrVT1vqi3Er750
# rF3+arb86lx56Q9DnLVSBQ/vPrGxj9BJrabjQhlUP/MvDqHLfP4T+SM52iUcuD4A
# SjpvMjA3ZB7HrnUH2FXSGMkOiryjXPB8CqeFgcIOr4+ZXNNgJbyDWmkcJRPNcvXr
# nICb3CxnxN3JCZjVc+vEIaPlMo4+L1KYxmA3ZIyyb0pUchjMJ4f6zXWiYyFMtT1k
# /Summ1WvJkxgtLlc/qtDva3QE2ZQHwvSiab/14AG8cMRAjMzYRf3Vh+OLzto5xXx
# d1ZKKZ4D2sIrJmEyW6BW5UkpjTan9cdSolYDIC84eIC99gauQTTLlEW9m8eJGB8L
# uv+prmpAmRPd71DfAbryBNbQMd80OF5XW8g4HlbUrEim7f/5uME77cIkvkRgp3fN
# 1T2YWbRD6qpgfc3C5S/x6/XUINWXNG5dBGsFEdLTkowJJ0TtTzUxRn50GQVi7Inj
# 6iNwmOTRL9SKExhGk2XlWHPTTD0neiI/w/ijVbf55oeC7EUexW46fLFOuato95tj
# 1ZFBvKkCAwEAAaOB+zCB+DAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0E
# CQei9Xp9UlMSkpXuOIAlDaZZMDAGCCsGAQUFBwEBBCQwIjAgBggrBgEFBQcwAYYU
# aHR0cDovL29jc3BzLnNzbC5jb20wEQYDVR0gBAowCDAGBgRVHSAAMBMGA1UdJQQM
# MAoGCCsGAQUFBwMDMDsGA1UdHwQ0MDIwMKAuoCyGKmh0dHA6Ly9jcmxzLnNzbC5j
# b20vc3NsLmNvbS1yc2EtUm9vdENBLmNybDAdBgNVHQ4EFgQUVML+EJUAk81q9efA
# 19myS7iPDOMwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQD1DyaH
# cK+Zosr11snwjWY9OYLTiCPYgr+PVIQnttODB9eeJ4lNhI5U0SDuYEPbV0I8x7CV
# 9r7M6qM9jk8GxitZhn/rcxvK5UAm4D1vzPa9ccbNfQ4gQDnWBdKvlAi/f8JRtyu1
# e4Mh8GPa5ZzhaS51HU7LYR71pTPfAp0V2e1pk1e6RkUugLxlvucSPt5H/5CcEK32
# VrKk1PrW/C68lyGzdoPSkfoGUNGxgCiA/tutD2ft+H3c2XBberpotbNKZheP5/Dn
# V91p/rxe4dWMnxO7lZoV+3krhdVtPmdHbhsHXPtURQ8WES4Rw7C8tW4cM1eUHv5C
# NEaOMVBO2zNXlfo45OYS26tYLkW32SLK9FpHSSwo6E+MQjxkaOnmQ6wZkanHE4Jf
# /HEKN7edUHs8XfeiUoI15LXn0wpva/6N+aTX1R1L531iCPjZ16yZSdu1hEEULvYu
# YJdTS5r+8Yh6dLqedeng2qfJzCw7e0wKeM+U9zZgtoM8ilTLTg1oKpQRdSYU6iA3
# zOt5F3ZVeHFt4kk4Mzfb5GxZxyNi5rzOLlRL/V4DKsjdHktxRNB1PjFiZYsppu0k
# 4XodhDR/pBd8tKx9PzVYy8O/Gt2fVFZtReVT84iKKzGjyj5Q0QA07CcIw2fGXOho
# v88uFmW4PGb/O7KVq5qNncyU8O14UH/sZEejnTCCBoIwggRqoAMCAQICEA0SjRWQ
# uYT7eM+eDgHqTTMwDQYJKoZIhvcNAQELBQAweDELMAkGA1UEBhMCVVMxDjAMBgNV
# BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wgQ29ycDE0
# MDIGA1UEAwwrU1NMLmNvbSBDb2RlIFNpZ25pbmcgSW50ZXJtZWRpYXRlIENBIFJT
# QSBSMTAeFw0yMTEwMjUyMDQ1NTNaFw0yMzEwMjUyMDQ1NTNaMHcxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdSZWRtb25kMRkwFwYD
# VQQKDBBDbG91ZCBBc3NlcnQgTExDMQswCQYDVQQLDAJVUzEZMBcGA1UEAwwQQ2xv
# dWQgQXNzZXJ0IExMQzCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAOr+
# k6LFTYXntOaV4dGI/mIyACrEE3JCr4RP5Aur5QgWuraKhL2JSh63eADxOOuk5P4E
# KXhNG8F1XW67gDLNfUlQ9ZagD3+xts/Vc8hZOqmwGw57K0/EUy5RoVVVWntMQ7DX
# q0VNp2SgMVHBuRWLvB7MX7OGTJ96+IWgEzMITBxx+bToBl+iefkJhOVZi2lCG9oN
# M3i5Yrq2T7cV1uCQwl6JNBrsaCJ64vs6pz8LzR0XmhXtg5rLYehFCqcWYCcH4Njm
# ZUVharTmBozLOTPdL6y3UReZRM5J1SxvrfRvalFQGWX4hK6OirBey1yPnhzqNHAt
# iwCLxn5l+pnTh89LLmtc1Bp8OI2nN7yaiXK13441EQFpIYnBSQJ6e8n0dDpwwoux
# OSfxtgX8iila0DBoy9vLCyGTnyXdO1zZYGoll9v8aSbvWOZu4n4gvQPVIhgROU74
# wkfGXI61Ab9ZtltF5W5WQesJoDiRIYgHUxYWU5fsTPzsoQFIXzHyaTqeJKXOtwID
# AQABo4IBhzCCAYMwHwYDVR0jBBgwFoAUVML+EJUAk81q9efA19myS7iPDOMwegYI
# KwYBBQUHAQEEbjBsMEgGCCsGAQUFBzAChjxodHRwOi8vY2VydC5zc2wuY29tL1NT
# TGNvbS1TdWJDQS1Db2RlU2lnbmluZy1SU0EtNDA5Ni1SMS5jZXIwIAYIKwYBBQUH
# MAGGFGh0dHA6Ly9vY3Nwcy5zc2wuY29tMFEGA1UdIARKMEgwCAYGZ4EMAQQBMDwG
# DCsGAQQBgqkwAQMDATAsMCoGCCsGAQUFBwIBFh5odHRwczovL3d3dy5zc2wuY29t
# L3JlcG9zaXRvcnkwEwYDVR0lBAwwCgYIKwYBBQUHAwMwTQYDVR0fBEYwRDBCoECg
# PoY8aHR0cDovL2NybHMuc3NsLmNvbS9TU0xjb20tU3ViQ0EtQ29kZVNpZ25pbmct
# UlNBLTQwOTYtUjEuY3JsMB0GA1UdDgQWBBT5QOeOXNcPYtBWMGBY9lkdLp4AczAO
# BgNVHQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAGL909UmLyhbmLPe0AyH
# mItkDXXIonmIsCrNrquwtFB5ZFhV2eQEEcFi8N+R1Pw2CGWNQe8EGN83nr1ItDNc
# JqweHvadc6i5FF1DVRPKEVHzORKKsKGZ97KyYQkT+YxJLfVCLdFCemCd2QYQuFJQ
# 4LdKcR9QZE0LvoiE9qVZ0fv2oO/4Yg/jgFTS4m1znT1IXIfCgnxfK9dr5QwQt/wX
# 3ayq554Ptbl7f6g9AGnD3U7cEaDvaPqRX16AGgxWbJU4W740UeNZnsFvdNcBHY/7
# wWxCzR03dzTGivW1aozokn05KeOyF0ZU7vhhXSeKyoaLzJXEr96r7pBUfBlVL9p9
# 6IVsHxsnPGFVZiaaZ0YQFsBWJZLEpVOIXCl2Jb2KX/NshRJGeijK0a6msVYIHKPv
# mhLnDruJkadj4RIgk8AQ2wsttUWtjWRKjD072OnAVZatRsCPIPQJsk+8gSKqfDZR
# o3DZhnrCd6TfjuoU9aULSXrwJljrOqLNOZHFoBuT7y3dZHPoo596yCmwUs+7dYCR
# nBU+hQ0Fca9aWpaYw4lKdxxhXn66EIR00TbaE3HYdHhlOc8koA9VUI/eiWdd1rKL
# j67luXYkCEJ37fE6SlyL1Jkhu3dd79+GSYlTINRnH415fH4DwiOMckj8kRbdyRV1
# tT1R5QeVMAdZHzQ80j8shEydMYICrjCCAqoCAQEwgYwweDELMAkGA1UEBhMCVVMx
# DjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMREwDwYDVQQKDAhTU0wg
# Q29ycDE0MDIGA1UEAwwrU1NMLmNvbSBDb2RlIFNpZ25pbmcgSW50ZXJtZWRpYXRl
# IENBIFJTQSBSMQIQDRKNFZC5hPt4z54OAepNMzAJBgUrDgMCGgUAoHgwGAYKKwYB
# BAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAc
# BgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAjBgkqhkiG9w0BCQQxFgQUaaur
# 9iSmUwrwopcIMlunDws5BukwDQYJKoZIhvcNAQEBBQAEggGAtZnhM0Z6fj/Oyyd9
# EE4wJhuHPvb4lYfXUJn7Xn4a/VaAiqeO1eOWqnpvikF+i3LFJR57SUwCPby22Wjc
# GZ40pfxfdoNZGKLb7nBo18xCHHEmND29JmReNzeDoWBu7ky4nkFuiL0ftJpXqAa5
# J3LBu3Tgdg4Ne/2rfffbsbDmkJLHCR5+4bY+oO00UqXNAlU6UZWLrqzIdhlvmaXY
# JEclSa0i8XFjjgO/YvYIL90zbVPiJA8DFNkLZdF0j2FG3D79m8hfcxFXRZcNtLUo
# hPwu9nX6UOshGPZ6Zg5MEB9JnAA0iEM4GZiUG/JbUKSSYaztSUy6cVp3ZZ0L7njs
# 45eTALuCasOJoj8ZryfFn1VYcjKgOPyWx3dy+jc1AytrVURhwdSn2o/9wO+Km+D6
# Iff2yEh1KVSKh0iotDoYiVHn1pNB2kX38/V8x/1PxrvdIZJca+b9cDLki6BTThTQ
# tSOViFL34NNEem6B19khVFmF9UyN8z3ar2s1W8kawqDifj/V
# SIG # End signature block