Files
T
Zack Meier 1d304511b8 update
2026-04-15 15:45:50 -05:00

168 lines
5.6 KiB
PowerShell

[CmdletBinding(DefaultParameterSetName = 'Windows')]
param(
[Parameter(Mandatory, ParameterSetName = 'Windows')]
[Parameter(Mandatory, ParameterSetName = 'Cloud Service')]
[String]$CommonName,
# Host for Cert Delivery, comma seperated
[Parameter(Mandatory, ParameterSetName = 'Windows')]
[String]$DestinationServer,
# Option for pfx in PasswordState
[Parameter(Mandatory, ParameterSetName = 'Windows')]
[bool]$PfxtoPasswordState,
# AppName CI in CMDB
[Parameter(Mandatory, ParameterSetName = 'Cloud Service')]
[String]$ApplicationName
)
#PSU Reassignment per Zacks standards
$RequestedBy = $UAJob.Identity.Name # user that started the job
$PSUJobId = $UAJob.Id
$DestinationServerArray = $DestinationServer -split ","
if ($PSCmdlet.ParameterSetName -eq 'Windows') {
Write-Verbose -Message "Validate host" -Verbose
Foreach ($ComputerName in $DestinationServerArray) {
$remotehi=Invoke-Command -ComputerName $ComputerName -ScriptBlock {"hi"} -Credential $Secret:ndgov_svcitdpsuwin
if ($remotehi -eq "hi") {
"Connection to host $ComputerName Succeded"
} else {
"Connection to host $ComputerName failed"
exit
}
}
}
if ($PSCmdlet.ParameterSetName -eq 'Windows') {
Write-Verbose -Message "Retrieve CI from ServiceNow" -Verbose
#We are just pulling appname from first DestinationServer
New-ITDServiceNowSession -Environment Production -Credential $Secret:snow_vmcred
$IP=(Resolve-DnsName -Name $DestinationServerArray[0]).IPAddress
$Filter= "ip_address=$ip^operational_status=1"
$Fields=("FQDN","ip_address","Location","model_id","Name","dns_domain","os_domain","Schedule","environment","sys_class_name","u_nd_application_svc","discovery_source","support_group")
$CI= Get-ITDServiceNowRecord -Table "cmdb_ci_win_server" -Filter $Filter -Fields $Fields -First 1
$ApplicationName=$CI.u_nd_application_svc.display_value
if (!$ApplicationName) {
write-Error "CI NOT FOUND"
exit
}
$customFields = @(
[pscustomobject]@{ name = "ApplicationName"; value = $ApplicationName }
)
}
else { #ParmeterSet Not Windows
Write-Verbose -Message "Retrieve App record from ServiceNow" -Verbose
New-ITDServiceNowSession -Environment Production -Credential $Secret:snow_vmcred
$Filter= "name=$ApplicationName"
$Fields=("name")
$CI= Get-ITDServiceNowRecord -Table "cmdb_ci_service_auto" -Filter $Filter -Fields $Fields
if ($CI.name.value -ne $ApplicationName ) {
Write-Error "Could not find $ApplicationName"
exit
}
}
Write-Verbose -Message "Validate Email Address" -Verbose
$RequesterEmail=Get-ICE-Snowemail -ApplicationName $ApplicationName -Credential $Secret:snow_vmcred
$EmailAddressList = $RequesterEmail -split ","
foreach ($e in $EmailAddressList) {
$user = Get-ADUser -Filter "Mail -eq '$e'" -Properties Mail
$group = Get-ADGroup -Filter "Mail -eq '$($e)'" -Properties Mail
if ($user -or $group) {
Write-Verbose -Message "$e Passed testing" -Verbose
}
else {
Write-Error "$e is an invalid email address. Terminating Script"
exit
}
}
#Set env prod
Write-Verbose -Verbose "Set DB Environment"
Set-JDEnvironment -Name prod
Write-Verbose -Verbose "Remoting to other server to get cert info"
$ComputerName=$DestinationServerArray[0]
$OldCert=Get-ICE-RemoteCertInfo -ComputerName $ComputerName -CommonName $CommonName -Credential $Secret:ndgov_svcitdpsuwin
Write-Verbose -Verbose "Old Cert"
$OldCert|fl
$ExpiryDate=$OldCert.NotAfter
$subjectAlternative = $OldCertsubjectAlternative
$ParameterSetName=$PSCmdlet.ParameterSetName
$SubjectAlternative = $OldCert.subjectAlternative
$ExpiryDate = $OldCert.NotAfter
$Thumbprint=$OldCert.Thumbprint
$PreviousThumbprint = $false
Write-Verbose -Verbose "Create Powershell object for Logging"
$log_psobject=[pscustomobject]@{
Timestamp = (Get-Date)
ParameterSetName = $ParameterSetName
RequestedBy = $RequestedBy
RequesterEmail = $RequesterEmail
CommonName = $CommonName
Environment = $CI.environment.value
NotBefore = $OldCert.NotBefore
SubjectAlternative = $SubjectAlternative
DestinationServer = $DestinationServer
PfxtoPasswordState = $PfxtoPasswordState
ApplicationName = $ApplicationName
ExpiryDate = $ExpiryDate
Thumbprint = $Thumbprint
PreviousThumbprint = $PreviousThumbprint
is_retired = $false
}
$bla=$log_psobject|Out-String
Write-Host $bla
#$Result = Read-Host "Does this information look correct y/n"
$Result = "y" #forcing
if ($result -eq "y") {
Write-Verbose -Verbose "Log new transaction to both tables. "
#Cache table common name is the primary key so there should only be an update?
$table=@("certlog","certcache")
Foreach ($t in $table) {
$log_psobject| Add-JDJson -TableName $t -Verbose
}
}
else {
"Did not Save! You are NOT Registered!"
}
Write-Verbose -Verbose "Installing Client Module"
$InstallParams= @{
DestinationServer = $DestinationServer
Email = $RequesterEmail
PSUJobId = $PSUJobId
Credential = $Secret:ndgov_svcitdpsuwin
}
Install-ICE-Client @InstallParams