168 lines
5.6 KiB
PowerShell
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 |