ps/Modules/Alkami.PowerShell.SDK/pointtoqa_sdk.ps1
2023-05-30 22:51:22 -07:00

674 lines
24 KiB
PowerShell

Param(
[Parameter(Mandatory=$false,Position=1)][string]$intendedName = "QA2"
)
process {
$nameMatrix = @{
'dev' = @();
'qa2' = @();
'red9' = @();
};
$Certs = @{
'dev' = @{ Name = 'DEV'; Database = 'AlkamiMaster_Dev1'; HostnameBase = 'dev.alkamitech.com'; Broadcaster = ''; Subscription = 'localhost'; };
'qa2' = @{ Name = 'QA2'; Database = 'AlkamiMaster_QA2'; HostnameBase = 'QA2.alkamitech.com'; Broadcaster = '10.0.12.59'; Subscription = '10.0.12.59'; };
'red9' = @{ Name = 'RED9'; Database = 'AlkamiMaster_Red9'; HostnameBase = 'red9.dev.alkamitech.com'; Broadcaster = '10.27.0.201'; Subscription = '10.27.0.201'; };
};
$name = "";
if ($nameMatrix.ContainsKey($intendedName.ToLower())){
$name = $intendedName;
} else {
$name = @($nameMatrix.Keys | % { if ($nameMatrix.Item($_) -icontains $intendedName.ToLower()) { return $_; } })[0];
}
if ([String]::IsNullOrEmpty($name)) {
throw "could not find the name $name";
}
<#
[3:38 PM] Cole Brand: db reset-tenants -masterDatabaseName AlkamiMaster_QA7; install -rebind
[4:14 PM] Lance Turri: In IIS, update all bindings to the QA server and update cert to the respective server.
In your HOSTS file, update all entries from *.dev.* to *.[QASERVER].*
Ensure your machine.config points to the subscription service and broadcaster ip address of that QA server.
Clear out ASP.NET temporary cache files.
[4:15 PM] Lance Turri: It seems like the reset tenants call will update the bindings and replace the entires in the host file, but what about the machine config?
[4:25 PM] Cole Brand: Oh, loading the cert
[4:25 PM] Cole Brand: we need some way to get the cert
[4:25 PM] Cole Brand: the machine config was the part I explicitly need to write into a single file
+ db sync tenants from given db master
+ hosts sync tenants from tenant
add site for new server addresses (*.qa9.alkamitech.com, etc)
+ update machine.config subscription server name
#>
Function EnsureDatabaseAccess($connectionString) {
try
{
if ($script:v) {
Write-Host "Attempting to verify the connection to $connectionString";
}
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection "$connectionString";
$sqlConnection.Open();
$sqlConnection.Close();
return;
}
catch
{
Write-Host "Can not connect to the specified database. Do you have approved access to the server?";
throw "could not connect to the database!"
}
}
Function GetDefaultLocalConnectionString() {
$x = [Xml](Get-Content "C:\Windows\Microsoft.Net\Framework64\v4.0.30319\Config\machine.config");
try {
return $x.configuration.connectionStrings.add | % { if ($_.Name -eq "AlkamiMaster") { $_.ConnectionString } };
} catch {
return $null;
}
}
Function GetFormattedConnectionString($serverName, $instanceName, $databaseName) {
if ([System.String]::IsNullOrEmpty($serverName) -and [System.String]::IsNullOrEmpty($instanceName) -and [System.String]::IsNullOrEmpty($databaseName)) {
return (GetDefaultLocalConnectionString);
}
$serverName = ($serverName, "." -ne $null)[0];
if ($serverName.EndsWith("\\")){
$serverName = $serverName.Substring(0, $serverName.Length - 1);
}
$connectionString = "data source=$serverName\$instanceName;Integrated Security=SSPI; Database=$databaseName;";
if ($script:v) {
Write-Host $connectionString;
}
return $connectionString;
}
function GetFormattedConnectionStringForTenant($serverName, $databaseName)
{
$serverName = ($serverName, "." -ne $null)[0];
if ($serverName.EndsWith("\\")){
$serverName = $serverName.Substring(0, $serverName.Length - 1);
}
$connectionString = "data source=$serverName;Integrated Security=SSPI; Database=$databaseName;";
if ($script:v) {
Write-Host $connectionString;
}
return $connectionString;
}
Function InsertTenantsToServer($serverName, $instanceName, $databaseName, $tenants) {
$tenants = ($tenants, @() -ne $null)[0];
if ($tenants.length -eq 0) {
Write-Host "No tenants were provided. Can't update the database server $serverName\$instanceName $databaseName with the new records.";
}
$connectionString = (GetFormattedConnectionString $serverName $instanceName $databaseName);
EnsureDatabaseAccess $connectionString
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionString;
try
{
$sqlConnection.Open();
$tenants | % {
$tenant = $_;
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand();
$command.CommandText = "
IF NOT EXISTS (SELECT * FROM Tenant WHERE BankIdentifiers = @BankGuid) BEGIN
INSERT INTO Tenant (Name,BankIdentifiers,BankUrlSignatures,CreateDate,BankAdminUrlSignatures,DataSource,Catalog,Version,ConnectionString)
VALUES (@Name,@BankGuid,@Signature,GETDATE(),@AdminSignature,@DataSource,@Catalog,@Version,@ConnectionString);
END
ELSE
BEGIN
UPDATE Tenant SET BankUrlSignatures = @Signature, BankAdminUrlSignatures = @AdminSignature, DataSource = @DataSource, Catalog = @Catalog, ConnectionString = @ConnectionString WHERE BankIdentifiers = @BankGuid
END
";
$consume = $command.Parameters.AddWithValue("@Name",$tenant.Name);
$consume = $command.Parameters.AddWithValue("@BankGuid",$tenant.BankGuid);
$consume = $command.Parameters.AddWithValue("@Signature",$tenant.Signature);
$consume = $command.Parameters.AddWithValue("@AdminSignature",$tenant.AdminSignature);
$consume = $command.Parameters.AddWithValue("@DataSource",$tenant.DataSource);
$consume = $command.Parameters.AddWithValue("@Catalog",$tenant.Catalog);
$consume = $command.Parameters.AddWithValue("@Version",$tenant.Version);
$consume = $command.Parameters.AddWithValue("@ConnectionString", $tenant.ConnectionString);
$consume = $command.ExecuteNonQuery();
}
$sqlConnection.Close();
}
catch
{
if ($null -ne $sqlConnection) {
try {
$sqlConnection.Close();
} catch {
}
}
Write-Host "something happened bad...";
$_;
throw $_.Exception;
}
}
Function GetFullTenantsFromServer($serverName, $instanceName, $databaseName) {
$connectionString = (GetFormattedConnectionString $serverName $instanceName $databaseName);
EnsureDatabaseAccess $connectionString
try
{
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionString;
$sqlConnection.Open();
$query = "
SELECT
Name,
BankIdentifiers,
BankUrlSignatures,
BankAdminUrlSignatures,
DataSource,
Catalog,
Version
FROM Tenant;";
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand();
$command.CommandText = $query;
[System.Data.SqlClient.SqlDataReader]$reader = $command.ExecuteReader();
$data = @();
while ($reader.Read()) {
$data += @{
Name = $reader[0];
BankGuid = $reader[1];
Signature = $reader[2];
AdminSignature = $reader[3];
DataSource = $reader[4];
Catalog = $reader[5];
Version = $reader[6];
ConnectionString = (GetFormattedConnectionStringForTenant "dc00db01" $reader[5])
};
}
$sqlConnection.Close();
return $data;
}
catch
{
Write-Host "something happened bad...";
$_;
return $null;
}
}
Function UpdateTenants($databaseName) {
# always force it to localhost for this operation.
FlushTenantsFromServer "localhost" "" "AlkamiMaster"
$tenants = (GetFullTenantsFromServer (GetPrimaryDBServerForDev) "" $databaseName);
if($intendedName.ToLower() -eq "dev")
{
$tenants += GetDeveloperTenant;
}
InsertTenantsToServer "localhost" "" "AlkamiMaster" $tenants
}
Function FlushTenantsFromServer($serverName, $instanceName, $databaseName) {
$connectionString = (GetFormattedConnectionString $serverName $instanceName $databaseName);
EnsureDatabaseAccess $connectionString
$sqlConnection = New-Object System.Data.SqlClient.SqlConnection $connectionString;
try
{
$sqlConnection.Open();
$query = "DELETE FROM Tenant;";
[System.Data.SqlClient.SqlCommand]$command = $sqlConnection.CreateCommand();
$command.CommandText = $query;
$consume = $command.ExecuteNonQuery();
$sqlConnection.Close();
return $data;
}
catch
{
if ($null -ne $sqlConnection) {
try {
$sqlConnection.Close();
} catch {
}
}
Write-Host "something happened bad...";
$_;
throw $_.Exception;
}
}
Function GetPrimaryDBServerForDev(){
return "DC00DB01";
}
Function GetLocalDatabaseTenantsBankUrlSignatures() {
$tenants = (GetFullTenantsFromServer "localhost" "" "AlkamiMaster");
$ret = $tenants.Signature | % { if ($_ -match ",") { return ($_ -split ",")[0] } else { return $_; } }
return $ret;
}
Function GetLocalDatabaseTenantsBankAdminUrlSignatures() {
$tenants = (GetFullTenantsFromServer "localhost" "" "AlkamiMaster");
$tenants.AdminSignature
return;
}
Function GetKnownHostsEntries() {
@(
@{ ipAddress = "10.0.28.23"; hostname = "secure160.missionfed.com"; },
@{ ipAddress = "10.0.28.93"; hostname = "bldsrvr-dev03.ftfcu.corp"; },
@{ ipAddress = "10.0.28.50"; hostname = "rhpw065.efiserv.com"; },
@{ ipAddress = "10.0.28.86"; hostname = "msc-imgtsweb01.iccu.com"; },
@{ ipAddress = "10.0.28.72"; hostname = "dev-app.firsttechfed.com"; },
@{ ipAddress = "10.0.28.81"; hostname = "qa1-app-farm.firsttechfed.com"; },
@{ ipAddress = "10.0.28.116"; hostname = "qa2-app-farm.firsttechfed.com"; },
@{ ipAddress = "10.0.29.16"; hostname = "apidev.veridiancu.org"; },
@{ ipAddress = "10.0.29.19"; hostname = "olbvendor-dev.desertschools.net"; },
@{ ipAddress = "10.0.29.19"; hostname = "olbvendor-qa.desertschools.net"; },
@{ ipAddress = "192.168.119.219"; hostname = "onbase-acu.achievacu.com"; },
@{ ipAddress = "192.168.119.65"; hostname = "acu-agw04.achievacu.com"; },
@{ ipAddress = "216.189.225.47"; hostname = "uat.udi.local"; },
@{ ipAddress = "10.26.73.113"; hostname = "SymConnectMultiplexer"; },
@{ ipAddress = "127.0.0.1"; hostname = "AuditService"; },
@{ ipAddress = "127.0.0.1"; hostname = "BankService"; },
@{ ipAddress = "127.0.0.1"; hostname = "ContentService"; },
@{ ipAddress = "127.0.0.1"; hostname = "CoreService"; },
@{ ipAddress = "127.0.0.1"; hostname = "ExceptionService"; },
@{ ipAddress = "127.0.0.1"; hostname = "IP-STS"; },
@{ ipAddress = "127.0.0.1"; hostname = "MessageCenterService"; },
@{ ipAddress = "127.0.0.1"; hostname = "NagConfigurationService"; },
@{ ipAddress = "127.0.0.1"; hostname = "NotificationService"; },
@{ ipAddress = "127.0.0.1"; hostname = "RP-STS"; },
@{ ipAddress = "127.0.0.1"; hostname = "Scheduler"; },
@{ ipAddress = "127.0.0.1"; hostname = "SecurityManagementService"; },
@{ ipAddress = "127.0.0.1"; hostname = "STSConfiguration"; },
@{ ipAddress = "127.0.0.1"; hostname = "redis-18620.redis.corp.alkamitech.com"; },
@{ ipAddress = "127.0.0.1"; hostname = "ip.dev.alkamitech.com"; },
#todo: do we need these here still? can't they just be in the database?
@{ ipAddress = "127.0.0.1"; hostname = "developer.dev.alkamitech.com"; },
@{ ipAddress = "127.0.0.1"; hostname = "admin-developer.dev.alkamitech.com"; },
@{ ipAddress = "127.0.0.1"; hostname = "integration.dev.alkamitech.com"; },
@{ ipAddress = "127.0.0.1"; hostname = "admin-integration.dev.alkamitech.com"; }
)
}
Function WriteHostsEntryToFile($hostsRenderedLines, $pathName) {
$hostsRenderedLines | Out-File $pathName -encoding ASCII
}
Function SetOrbHostsComplete() {
WriteHostsEntryToFile (RenderCompleteHostsFile (GetHostsFileActualEntries (GetHostsFilePath)) (DeltaHostsFileAndExpectedEntries (GetHostsFilePath))) (GetHostsFilePath)
}
Function GetHostsFileActualEntries($hostsFilePath) {
(Get-Content -Path $hostsFilePath) | % {
$rawline = $_;
$record = @{ Keep = $false; ipAddress = $null; hostname = $null; Comment = $null; blankLine = $false; };
$commentSeparator = $rawline.IndexOf("#");
$comment = "";
$keep = $false;
if ($commentSeparator -gt -1) {
$record.Comment = $rawline.Substring($commentSeparator + 1, $rawline.Length - $commentSeparator - 1).Trim();
if ($commentSeparator -eq 0) {
$rawline = "";
} else {
$rawline = $rawline.Substring(0, $commentSeparator - 1);
}
}
if ($rawline.length -gt 0) {
$bits = [regex]::Split($rawline, "\s+")
if ($bits.count -gt 1) {
$record.ipAddress = $bits[0].Trim();
$record.hostname = $bits[1].Trim();
}
}
$record.Keep = (($record.Comment -imatch 'keep') -or ($record.ipAddress -eq $null));
$record.blankLine = (!$record.Comment -and !$record.ipAddress -and ($commentSeparator -eq -1));
return $record;
}
}
Function GetAllExpectedHostsEntries() {
$hostsEntries = @();
$hostsEntries += (GetKnownHostsEntries);
$hostsEntries += @(((GetLocalDatabaseTenantsBankUrlSignatures) | % { @{ ipAddress = "127.0.0.1"; hostname = $_; } } ));
$hostsEntries += @(((GetLocalDatabaseTenantsBankAdminUrlSignatures) | % { @{ ipAddress = "127.0.0.1"; hostname = $_; } } ));
$hostsEntries;
}
Function RenderCompleteHostsFile($entries, $newEntries) {
$entries = ($entries,@() -ne $null)[0];
$entries += @(($newEntries, @() -ne $null)[0]);
$maxHostnameWidth = 0;
$entries | % {
$entry = $_; #readability line
if (!!$entry.hostname) {
if ($entry.hostname.length -gt $maxHostnameWidth) {
$maxHostnameWidth = $entry.hostname.length;
}
}
}
if ($maxHostnameWidth -eq 0) {
return;
} else {
$maxHostnameWidth += 5;
}
($entries | % {
$entry = $_; #readability line
if (!$entry.ipAddress) {
if ($entry.blankLine) {
return "";
} else {
return ("# {0}" -f $entry.Comment);
}
} else {
$thirdPart = "";
$secondPart = $entry.hostname;
if (!!$entry.Comment) {
$thirdPart = "# $($entry.Comment)";
$secondPart = $secondPart.PadRight($maxHostnameWidth);
}
return ("{0}{1}{2}" -f $entry.ipAddress.PadRight(18), $secondPart, $thirdpart);
}
}) | Get-Unique
}
Function GetHostsFileActualEntries($hostsFilePath) {
(Get-Content -Path $hostsFilePath) | % {
$rawline = $_;
$record = @{ Keep = $false; ipAddress = $null; hostname = $null; Comment = $null; blankLine = $false; };
$commentSeparator = $rawline.IndexOf("#");
$comment = "";
$keep = $false;
if ($commentSeparator -gt -1) {
$record.Comment = $rawline.Substring($commentSeparator + 1, $rawline.Length - $commentSeparator - 1).Trim();
if ($commentSeparator -eq 0) {
$rawline = "";
} else {
$rawline = $rawline.Substring(0, $commentSeparator - 1);
}
}
if ($rawline.length -gt 0) {
$bits = [regex]::Split($rawline, "\s+")
if ($bits.count -gt 1) {
$record.ipAddress = $bits[0].Trim();
$record.hostname = $bits[1].Trim();
}
}
$record.Keep = (($record.Comment -imatch 'keep') -or ($record.ipAddress -eq $null));
$record.blankLine = (!$record.Comment -and !$record.ipAddress -and ($commentSeparator -eq -1));
return $record;
}
}
Function GetHostsFilePath() {
return "$env:windir\System32\drivers\etc\hosts";
}
Function DeltaHostsFileAndExpectedEntries($hostsPath){
$existingEntries = (GetHostsFileActualEntries $hostsPath);
$expectedEntries = (GetAllExpectedHostsEntries);
$missingEntries = @();
$expectedEntries | % {
$found = $false;
$expectedEntry = $_;
if (!!$expectedEntry.ipaddress) {
$existingEntries | % {
$existingEntry = $_;
if (!!($existingEntry.ipAddress) -and ($expectedEntry.hostname -eq $existingEntry.hostname) -and ($expectedEntry.ipAddress -eq $existingEntry.ipAddress)) {
$found = $true;
}
}
if (!$found) {
$missingEntries += $expectedEntry;
}
}
}
$missingEntries;
}
Function UpdateMachineConfigs($broadcaster, $subscription) {
UpdateMachineConfig 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config' $broadcaster $subscription;
UpdateMachineConfig 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config' $broadcaster $subscription;
}
Function UpdateMachineConfig($path, $broadcaster, $subscription) {
$config = [Xml](get-content $path);
$config.configuration.appSettings.add | % { if ($_.Key -eq "SubscriptionServiceMachine") { $_.Value = $subscription; } };
$config.configuration.appSettings.add | % { if ($_.Key -eq "Broadcasters") { $_.Value = $broadcaster; } };
$config.Save($path);
}
Function GetOrCreateAppPoolForOrb($appPoolName) {
$ret = Get-Item IIS:\AppPools\$appPoolName -ErrorAction Ignore;
if ($ret -eq $null) {
$ret = New-Item IIS:\AppPools\$appPoolName -ErrorAction Stop;
Set-ItemProperty IIS:\AppPools\$appPoolName managedRuntimeVersion 'v4.0';
Set-ItemProperty IIS:\AppPools\$appPoolName ProcessModel.loadUserProfile true;
Set-ItemProperty IIS:\AppPools\$appPoolName ProcessModel.idleTimeout -Value "0";
}
return $ret;
}
Function GetOrCreateWebsite($siteName, $physicalPath) {
Write-Host $siteName
Write-Host $physicalPath
$appPool = GetOrCreateAppPoolForOrb $siteName;
$ret = WebAdministration\Get-WebSite -Name $siteName
if ($ret -eq $null) {
$ret = WebAdministration\New-Website -Name $siteName -PhysicalPath $physicalPath -ApplicationPool $appPool.Name -ErrorAction Stop;
}
if ($ret -eq $null){
throw "could not create/find the website for $siteName! ARGH!";
}
return $ret;
}
Function rebind-ipsts($site) {
Write-Host "rebing-ipsts" -ForegroundColor Yellow
$cert = (Get-ChildItem cert:\LocalMachine\My | Where { $_.Subject -like "*``*.$($site.HostnameBase)*" } -ErrorAction Ignore);
$toBeInstalled = @("ip.$($site.HostnameBase)");
if (Test-Path 'C:\Orb\IP-STS') {
$consume = GetOrCreateWebsite 'IPSTS' 'C:\Orb\IP-STS'
} else {
$consume = GetOrCreateWebsite 'IPSTS' 'C:\Orb\IPSTS'
}
#Remove-WebBinding -Name 'IPSTS' -IPAddress * -Port 80 -ErrorAction Ignore;
if ($toBeInstalled -ne $null) {
Write-Host "Installing new client sites under ORB\Client";
Write-Host -NoNewline "of $($toBeInstalled.Length) we are on ";
$counter = 0;
$toBeInstalled | %{
$counter += 1;
$newSiteBinding = $_;
if (!(WebAdministration\Get-WebBinding -Name 'IPSTS' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding)) {
$consume = WebAdministration\New-WebBinding -Name 'IPSTS' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding -SslFlags 1
(WebAdministration\Get-WebBinding -Name 'IPSTS' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding).AddSslCertificate($cert.Thumbprint, "my");
}
Write-Host -NoNewline "$counter ";
}
Write-Host "done";
}
}
Function rebind-clients($rebindTier, $site) {
$toBeInstalled = (GetLocalDatabaseTenantsBankUrlSignatures);
$sites = gci IIS:\Sites -Exclude "WebClientAdmin", "Eagle Eye", "Default Web Site", "IPSTS"
$consume = $sites | % { Stop-Website -Name $_.Name; Remove-Website -Name $_.Name; }
$iis = @{};
if (Test-Path 'C:\Orb\Shared') {
$iis = GetOrCreateWebsite 'WebClient' 'C:\Orb\WebClient'
} else {
$iis = GetOrCreateWebsite 'WebClient' 'C:\Orb\Client'
}
WebAdministration\Remove-WebBinding -Name $iis.Name -IPAddress * -Port 80 -ErrorAction Ignore;
if ($toBeInstalled -ne $null) {
Write-Host "Installing new client sites under ORB\Client";
Write-Host -NoNewline "of $($toBeInstalled.Length) we are on ";
$counter = 0;
$toBeInstalled | %{
$counter += 1;
$newSiteBinding = $_;
$pos = $newSiteBinding.IndexOf(".")
$rightPart = $newSiteBinding.Substring($pos+1)
$cert = (Get-ChildItem cert:\LocalMachine\My | Where { $_.Subject -like "*``*.$rightPart*" } -ErrorAction Stop);
if (!(Get-WebBinding -Name 'WebClient' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding)) {
WebAdministration\New-WebBinding -Name 'WebClient' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding -SslFlags 1
#Write-Host "Get-WebBinding -Name 'WebClient' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding";
#Get-WebBinding -Name 'WebClient' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding
#throw;
(Get-WebBinding -Name 'WebClient' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding).AddSslCertificate($cert.Thumbprint, "my");
}
Write-Host -NoNewline "$counter ";
}
Write-Host "done";
}
$iis.Start();
}
Function rebind-admin($rebindTier, $site) {
$toBeInstalled = (GetLocalDatabaseTenantsBankAdminUrlSignatures);
$sites = gci IIS:\Sites -Exclude "WebClient", "Eagle Eye", "Default Web Site", "IPSTS"
$consume = $sites | % { Stop-Website -Name $_.Name; Remove-Website -Name $_.Name; }
$iis = @{};
if (Test-Path 'C:\Orb\Shared') {
$iis = GetOrCreateWebsite 'WebClientAdmin' 'C:\Orb\WebClientAdmin'
} else {
$iis = GetOrCreateWebsite 'WebClientAdmin' 'C:\Orb\Admin'
}
WebAdministration\Remove-WebBinding -Name $iis.Name -IPAddress * -Port 80 -ErrorAction Ignore;
if ($toBeInstalled -ne $null) {
Write-Host "Installing new client sites under ORB\Admin";
Write-Host -NoNewline "of $($toBeInstalled.Length) we are on ";
$counter = 0;
$toBeInstalled | %{
$counter += 1;
$newSiteBinding = $_;
$pos = $newSiteBinding.IndexOf(".")
$rightPart = $newSiteBinding.Substring($pos+1)
$cert = (Get-ChildItem cert:\LocalMachine\My | Where { $_.Subject -like "*``*.$rightPart*" } -ErrorAction Stop);
if (!(WebAdministration\Get-WebBinding -Name 'WebClientAdmin' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding)) {
$binding = WebAdministration\New-WebBinding -Name 'WebClientAdmin' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding -SslFlags 1
(WebAdministration\Get-WebBinding -Name 'WebClientAdmin' -Protocol https -Port 443 -IPAddress * -HostHeader $newSiteBinding).AddSslCertificate($cert.Thumbprint, "my");
}
Write-Host -NoNewline "$counter ";
}
Write-Host "done";
}
}
Function LoadWebAdministrationModule() {
if (![Environment]::Is64BitProcess) { throw "you are using powershell in 32 bit mode. This is a failure. Please run in 64 bit mode."; }
if ((Get-Module -ListAvailable | ? { $_.Name -eq "webadministration" }) -ne $null) {
import-module WebAdministration;
} else {
throw "WebAdministration powershell module must be installed and available";
}
}
Function GetDeveloperTenant() {
@{
Name = 'Developer Dynamic';
BankGuid = '78554577-9DE6-43CD-9085-5868977156D1';
Signature = 'developer.dev.alkamitech.com';
AdminSignature = 'admin-developer.dev.alkamitech.com';
DataSource = 'localhost';
Catalog = 'DeveloperDynamic';
Version = '';
ConnectionString = 'data source=localhost;Integrated Security=SSPI; Database=DeveloperDynamic;Max Pool Size=500;Pooling=true;MultipleActiveResultSets=true;'
};
}
#"AlkamiMaster_Dev1"
Function DoIt($site) {
Write-Host "Setting up QA env..." -ForegroundColor Yellow
if($intendedName.ToLower() -ne "dev")
{
UpdateMachineConfigs $site.Broadcaster $site.Subscription;
}
else
{
UpdateMachineConfigs "127.0.0.1" "127.0.0.1"
}
UpdateTenants $site.Database;
SetOrbHostsComplete;
LoadWebAdministrationModule;
rebind-clients $site;
rebind-admin $site;
rebind-ipsts $site;
if (!(WebAdministration\Get-WebBinding -Name 'Default Web Site' -Protocol http -Port 80 -IPAddress * -HostHeader localhost)) {
WebAdministration\New-WebBinding -Name "Default Web Site" -Protocol http -Port 80 -IPAddress * -HostHeader localhost
}
}
DoIt $certs[$name];
}