Public/Setup/Import-ParametersFile.ps1


<#PSScriptInfo
 
.VERSION 1.0.6
 
.GUID bcf1a3eb-5df0-40d1-9e90-1c67e328d550
 
.AUTHOR Pierre Smit
 
.COMPANYNAME iOCO Tech
 
.COPYRIGHT
 
.TAGS Citrix
 
.LICENSEURI
 
.PROJECTURI
 
.ICONURI
 
.EXTERNALMODULEDEPENDENCIES
 
.REQUIREDSCRIPTS
 
.EXTERNALSCRIPTDEPENDENCIES
 
.RELEASENOTES
Created [25/06/2019_14:04] Initial Script Creating
Updated [01/07/2020_14:43] Script Fle Info was updated
Updated [01/07/2020_15:42] Script Fle Info was updated
Updated [01/07/2020_16:07] Script Fle Info was updated
Updated [01/07/2020_16:13] Script Fle Info was updated
Updated [06/03/2021_20:58] Script Fle Info was updated
Updated [15/03/2021_23:28] Script Fle Info was updated
 
#>














<#
 
.DESCRIPTION
Function for Citrix XenDesktop HTML Health Check Report
 
#>

# .ExternalHelp XDHealthCheck-help.xml


Function Import-ParametersFile {
    PARAM(
        [Parameter(Mandatory = $false, Position = 0)]
        [ValidateScript( { (Test-Path $_) -and ((Get-Item $_).Extension -eq ".json") })]
        [string]$JSONParameterFilePath = (Get-Item $profile).DirectoryName + "\Parameters.json",
        [Parameter(Mandatory = $false, Position = 1)]
        [switch]$RedoCredentials = $false
    )

    $JSONParameter = Get-Content ($JSONParameterFilePath) | ConvertFrom-Json
    if ($null -eq $JSONParameter) { Write-Error "Valid Parameters file not found"; break }

    Write-Colour "Using Variables from Parameters.json: ", $JSONParameterFilePath.ToString() -ShowTime -Color DarkCyan, DarkYellow -LinesAfter 1
    Write-Verbose "$((Get-Date -Format HH:mm:ss).ToString()) [Starting] Variable Details"
    $JSONParameter.PSObject.Properties | Where-Object { $_.name -notlike 'TrustedDomains' } | ForEach-Object { Write-Color $_.name, ":", $_.value  -Color Yellow, DarkCyan, Green -ShowTime; New-Variable -Name $_.name -Value $_.value -Force -Scope global }
    New-Variable -Name 'JSONParameterFilePath' -Value $JSONParameterFilePath -Scope global -force

    Write-Colour "Creating credentials for Trusted domains:" -ShowTime -Color DarkCyan -LinesBefore 2
    $Global:Trusteddomains = @()
    foreach ($domain in $JSONParameter.TrustedDomains) {
        $serviceaccount = Find-Credential | Where-Object target -Like ("*" + $domain.Description.tostring()) | Get-Credential -Store
        if ($null -eq $serviceaccount) {
            $serviceaccount = BetterCredentials\Get-Credential -Message ("Service Account for domain: " + $domain.NetBiosName.ToString())
            Set-Credential -Credential $serviceaccount -Target $domain.Description.ToString() -Persistence LocalComputer -Description ("Service Account for domain: " + $domain.NetBiosName.ToString())
        }
        Write-Color -Text $domain.FQDN, ":", $serviceaccount.username  -Color Yellow, DarkCyan, Green -ShowTime
        $CusObject = New-Object PSObject -Property @{
            FQDN        = $domain.FQDN
            Credentials = $serviceaccount
        }
        $Global:Trusteddomains += $CusObject
    }
    $global:CTXAdmin = Find-Credential | Where-Object target -Like "*CTXAdmin" | Get-Credential -Store
    if ($null -eq $CTXAdmin) {
        $AdminAccount = BetterCredentials\Get-Credential -Message "Admin Account: DOMAIN\Username for CTX Admin"
        Set-Credential -Credential $AdminAccount -Target "CTXAdmin" -Persistence LocalComputer -Description "Account used for Citrix queries" -Verbose
    }

    $global:NSAdmin = Find-Credential | Where-Object target -Like "*NSAdmin" | Get-Credential -Store
    if ($null -eq $CTXAdmin) {
        $NSAccount = BetterCredentials\Get-Credential -Message "Admin Account for Netscaler"
        Set-Credential -Credential $NSAccount -Target "NSAdmin" -Persistence LocalComputer -Description "Account used for Citrix Netscaler" -Verbose
    }
    Write-Colour "Netscaler Admin Credentials: ", $NSAdmin.UserName -ShowTime -Color yellow, Green -LinesBefore 1
    Write-Colour "Citrix Admin Credentials: ", $CTXAdmin.UserName -ShowTime -Color yellow, Green

    if ($SendEmail) {
        $global:SMTPClientCredentials = Find-Credential | Where-Object target -Like "*Healthcheck_smtp" | Get-Credential -Store
        if ($null -eq $SMTPClientCredentials) {
            $Account = BetterCredentials\Get-Credential -Message "smtp login for HealthChecks email"
            Set-Credential -Credential $Account -Target "Healthcheck_smtp" -Persistence LocalComputer -Description "Account used for XD health checks" -Verbose
        }
        Write-Colour "SMTP Credentials: ", $SMTPClientCredentials.UserName -ShowTime -Color yellow, Green -LinesBefore 2

    }

    if ($RedoCredentials) {
        foreach ($domain in $JSONParameter.TrustedDomains) {Find-Credential | Where-Object target -Like ("*" + $domain.Description.tostring()) | Remove-Credential -Verbose}
        Find-Credential | Where-Object target -Like "*CTXAdmin" | Remove-Credential -Verbose
        Find-Credential | Where-Object target -Like "*NSAdmin" | Remove-Credential -Verbose
    }

} #end Function