Test-ProvCloudConnection.ps1
<#PSScriptInfo .VERSION 1.0.3 .GUID d3b73fe3-d9b8-433c-a29d-cfddd90f8643 .AUTHOR Dragan Arambasic .COMPANYNAME Provance Technologies .COPYRIGHT Provance Technologies .TAGS Provance PCC AzureAutomation Azure .LICENSEURI https://www.provance.com/ .PROJECTURI https://www.provance.com/ .ICONURI http://assetdesk.com/Images_for_KB_Articles/PROVANCE_FavIcon_mstile-310x310.png .EXTERNALMODULEDEPENDENCIES .REQUIREDSCRIPTS .EXTERNALSCRIPTDEPENDENCIES .RELEASENOTES 1st Version with basic functionality .PRIVATEDATA Privatedata #> #Requires -Module Provance.Azure,Provance.Dyn365 <# .DESCRIPTION This runbook tests connections to Cloud Service Management targets (ITSM, Azure Subscriptions, ...) #> param( [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String] $ITSMConnection, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String] $AzureConnection, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String] $ServiceMapConnection, [Parameter(Mandatory = $false)] [ValidateNotNullOrEmpty()] [String] $CSPConnection ) try { #################### S T A R T runbook #################### $time = [DateTime]::UtcNow.ToString('u') Write-Output "Start runbook at: $time" # set the security protocol to TLS 1.2 [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12 ############## ITSM Connection - START ############## if ($ITSMConnection) { Write-Output ("1) Test ITSM connection: " + $ITSMConnection) $connectionITSM = Get-AutomationConnection -Name $ITSMConnection if ($connectionITSM) { $instanceURL = $connectionITSM.InstanceURL $userName = $connectionITSM.UserName $password = $connectionITSM.Password $tenantId = $connectionITSM.TenantId $applicationID = $connectionITSM.ApplicationID $apiVersion = $connectionITSM.APIVersion $msg = "instanceURL: {0}, userName: {1}, tenantId: {2}, applicationID: {3}, apiVersion: {4}" ` -f $instanceURL, $userName, $tenantId, $applicationID, $apiVersion Write-Output $msg if (($instanceURL -ne $null) -and ($userName -ne $null) -and ($password -ne $null) -and ($tenantId -ne $null)) { $pswSecureString = ConvertTo-SecureString -String $password -AsPlainText -Force $userCred = New-Object -TypeName PSCredential -ArgumentList $userName, $pswSecureString $uCntx = Get-ProvAzureAuthContext -Resource $instanceURL -UserCredential $userCred -TenantId $tenantId if ($uCntx) { Write-Output "INFO: ITSM context is OK" $lic = Get-ProvDyn365Entity -AuthContext $uCntx ` -EntityName apitil_itsmlicense ` -SelectSection "apitil_orguniquename,apitil_azuresubscription,apitil_azureservicemap" ` -FilterSection "(apitil_productlicensed eq 'Cloud Integration')" ` -TopSection 1 if ($lic) { Write-Output ("INFO: Cloud Integration license:") $lic } else { Write-Output ("INFO: Cloud Integration license is missing") } } else { Write-Output "*** ERROR: No valid ITSM context. Check value of the following ITSM connection properties: InstanceURL, UserName, Password and TennatId" } } else { Write-Output "*** ERROR: ITSM connection propertiy (InstanceURL, UserName, Password or TennatId) is null" } } else { Write-Output "*** ERROR: ITSM connection is missing" } } # ITSM Connection - END # ############## Azure Connection - START ############## if ($AzureConnection) { Write-Output ("2) Test Azure connection: " + $AzureConnection) $connectionAzure = Get-AutomationConnection -Name $AzureConnection if ($connectionAzure) { $tenantName = $connectionAzure.TenantName $subscriptionName = $connectionAzure.SubscriptionName $subscriptionId = [System.Guid]$connectionAzure.SubscriptionId $tenantId = $connectionAzure.TenantId $applicationID = $connectionAzure.ApplicationID $applicationKey = $connectionAzure.ApplicationKey $apiVersion = $connectionAzure.APIVersion $msg = "tenantName: {0}, subscriptionName: {1}, subscriptionId: {2}, tenantId: {3}, applicationID: {4}, apiVersion: {5}" ` -f $tenantName, $subscriptionName, $subscriptionId, $tenantId, $applicationID, $apiVersion Write-Output $msg if (($tenantId -ne $null) -and ($applicationKey -ne $null) -and ($applicationID -ne $null) -and ($subscriptionId -ne $null)) { $appKeySecureString = ConvertTo-SecureString -String $applicationKey -AsPlainText -Force $cred = New-Object -TypeName PSCredential -ArgumentList $applicationID, $appKeySecureString $aCntx = Get-ProvAzureAuthContext -TenantId $tenantId -ClientCredential $cred if ($aCntx) { Write-Output "INFO: Azure context is OK" $subscription = Get-ProvAzureSubscription -AuthContext $aCntx -SubscriptionId $subscriptionId if ($subscription) { Write-Output ("INFO: Found Azure subscription: " + $subscription.DisplayName) } else { Write-Output ("*** ERROR: No valid Azure subscription Id: " + $subscriptionId) } } else { Write-Output "*** ERROR: No valid Azure context. Check value of the following Azure connection properties: TenantId, ApplicationId, and ApplicationKey" } } } else { Write-Output ("*** ERROR: Azure connection: " + $AzureConnection + " is missing") } } # Azure Connection - END # ############## Service Map Connection - START ############## if ($ServiceMapConnection) { Write-Output ("3) Test Service Map connection: " + $ServiceMapConnection) $connectionServiceMap = Get-AutomationConnection -Name $ServiceMapConnection if ($connectionServiceMap) { $omsWorkspace = $connectionServiceMap.OMSWorkspace $resourceGroup = $connectionServiceMap.OMSRGName $subscriptionId = $connectionServiceMap.SubscriptionId $tenantId = $connectionServiceMap.TenantId $applicationID = $connectionServiceMap.ApplicationID $applicationKey = $connectionServiceMap.ApplicationKey $apiVersion = $connectionServiceMap.APIVersion $msg = "omsWorkspace: {0}, resourceGroup: {1}, subscriptionId: {2}, tenantId: {3}, applicationID: {4}, apiVersion: {5}" ` -f $omsWorkspace, $resourceGroup, $subscriptionId, $tenantId, $applicationID, $apiVersion Write-Output $msg if (($tenantId -ne $null) -and ($applicationKey -ne $null) -and ($applicationID -ne $null) -and ($subscriptionId -ne $null)) { $appKeySecureString = ConvertTo-SecureString -String $applicationKey -AsPlainText -Force $cred = New-Object -TypeName PSCredential -ArgumentList $applicationID, $appKeySecureString $aCntx = Get-ProvAzureAuthContext -TenantId $tenantId -ClientCredential $cred if ($aCntx) { Write-Output "INFO: ServiceMap context is OK" if (($omsWorkspace -ne $null) -and ($resourceGroup -ne $null)) { $smWrkSpc = Get-ProvAzureServiceMapWorkspace -AuthContext $aCntx ` -SubscriptionId $subscriptionId ` -ResourceGroup $resourceGroup ` -OMSWorkspace $omsWorkspace ` -ApiVersion $apiVersion ` -Verbose if ($smWrkSpc) { Write-Output ("INFO: Found Service Map workspace " + $smWrkSpc.DisplayName) } else { Write-Output ("*** ERROR: Servic Map workspace " + $omsWorkspace + "in resource group " + $resourceGroup + " is missing") } } else { Write-Output "*** ERROR: Servic Map workspace or resource group is null" } } else { Write-Output "*** ERROR: No valid ServiceMap context. Check value of the following Azure connection properties: TenantId, ApplicationId, and ApplicationKey" } } } else { Write-Output ("*** ERROR: Service Map connection " + $ServiceMapConnection + " is missing") } } # Service Map Connection - END # ############## CSP Connection - START ############## if ($CSPConnection) { Write-Output ("4) Test Service Map connection: " + $CSPConnection) $connectionCSP = Get-AutomationConnection -Name $CSPConnection if ($connectionCSP) { $baseURL = $connectionCSP.BaseURL $resource = $connectionCSP.Resource $loginURL = $connectionCSP.LoginURL $userName = $connectionCSP.UserName $password = $connectionCSP.Password $tenantId = $connectionCSP.TenantId $applicationID = $connectionCSP.ApplicationID $apiVersion = $connectionCSP.APIVersion $msg = "baseURL: {0}, resource: {1}, loginURL: {1}, userName: {1}, password: {2}, tenantId: {3}, applicationID: {4}, apiVersion: {5}" ` -f $baseURL, $resource, $loginURL, $userName, $password, $tenantId, $applicationID, $apiVersion Write-Output $msg if (($resource -ne $null) -and ($userName -ne $null) -and ($password -ne $null) -and ($tenantId -ne $null)) { $pswSecureString = ConvertTo-SecureString -String $password -AsPlainText -Force $userCred = New-Object -TypeName PSCredential -ArgumentList $userName, $pswSecureString $uCntx = Get-ProvAzureAuthContext -Resource $resource -UserCredential $userCred -TenantId $tenantId if ($uCntx) { Write-Output "INFO: CSP context is OK" } else { Write-Output "*** ERROR: No valid CSP context. Check value of the following CSP connection properties: BaseURL, UserName, Password and TennatId" } } } else { Write-Output "*** ERROR: CSP connection is missing" } } # CSP Connection - END # } catch { $message = "Runbook *** ERROR: {0}" -f $_.Exception Write-Error -Message $message } finally { $time = [DateTime]::UtcNow.ToString('u') Write-Output "End of runbook at: $time" } |