Function DPAWSUpdateEC2Tag( [Parameter(Mandatory=$True)] [string]$InstanceList, [Parameter(Mandatory=$True)] [string]$TagKey, [Parameter(Mandatory=$True)] [string]$TagValue ) { <# .SYNOPSIS ======================================================================================== DATAPIPE AUTOMATION Create or update EC2 Tags AUTHOR: Justin Procacci SUPPORTED VERSIONS: 2012 R2 CMDLET VERSION: 1.0.1 DATE: 10/8/2014 ======================================================================================== Updates Multiple EC2 Tags .DESCRIPTION REQUIRED - [-InstanceList] - List of instances to add/modify the -Tagkey to the Tagvalue REQUIRED - [-TagKey] - EC2 Tag Key to update REQUIRED - [-TagValue] - EC2 Tag Value EXAMPLE 1: DPAWSUpdateEC2Tag -InstanceList "i-5493e95f (eCP IIS), i-a9aad0a2 (eCP Test 01)" -TagKey DPEmployee -TagValue Lonny #> $Message = "FUNCTION DPAWSUpdateEC2Tag Start"; DPLOG -type INFO -Message $Message;Write-Host $Message; $AWSRegionCode = ((Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").Region) $Message = ("Current Region: {0}" -f $AWSRegionCode) DPLOG -type ERROR -Message $Message;Write-Host $Message; # Check if the OS is supported if (((Get-WmiObject Win32_OperatingSystem).Version) -lt "6.2.") { # Unsupported OS $Message = "THIS OS IS NOT SUPPORTED BY THIS FUNCTION" DPLOG -type ERROR -Message $Message Write-Host $Message Exit; } # Check if this is an AWS server if ((((Get-WmiObject Win32_ComputerSystem).PrimaryOwnerName) -ne "Amazon") -and (((Get-WmiObject Win32_ComputerSystem).PrimaryOwnerName) -ne "EC2")) { # Unsupported OS $Message = "THIS FUNCTION CAN ONLY BE RUN ON AN AWS SERVER." DPLOG -type ERROR -Message $Message Write-Host $Message; Exit; } # Import AWS module if required if (((Get-WmiObject Win32_OperatingSystem).Version) -lt "6.2.") {Import-module AWSPowershell }; $Message = ("Checking CMDLet module dependencies") if ((Get-Module).Name -contains "AWSPowershell"){$Message = ("AWSPowershell is available");DPLOG -type INFO -Message $Message;Write-Host $Message;} else {$Message = ("Importing module AWSPowershell"); DPLOG -type INFO -Message $Message;Write-Host $Message; Import-Module AWSPowershell;} if ((Get-Module).Name -contains "DPWindowsPSM"){$Message = ("DPWindowsPSM is available");DPLOG -type INFO -Message $Message;Write-Host $Message;} else {$Message = ("DPWindowsPSM is not available. Please import and re-run");DPLOG -type ERROR -Message $Message;Write-Host $Message;exit;} $tag = New-Object Amazon.EC2.Model.Tag $tag.Key = $TagKey $tag.Value = $TagValue [string[]]$instancelist2 = $InstanceList.split(",") if ($instancelist2.Count -gt 1){ $cnt = 0; while ($cnt -lt $InstanceList2.Count){ $instancelist2[$cnt] = $InstanceList2[$cnt].Substring(0,$InstanceList2[$cnt].IndexOf("(")) #clear everything after the ( $instancelist2[$cnt] = $InstanceList2[$cnt].Replace(" ",""); #remove the first space $InstanceFilter = New-Object Amazon.EC2.Model.Filter $InstanceFilter.Name = "instance-id" $InstanceFilter.Value = $instancelist2[$cnt] $Exists = Get-EC2Instance -Region $AWSRegionCode -Filter $InstanceFilter if($Exists){ try{ $Message = ('Adding tag {0} with Value {1} on EC2Instance {2}' -f $TagKey, $TagValue, $instancelist2[$cnt]); DPLOG -type INFO -Message $Message;Write-Host $Message; New-EC2Tag -Region $AWSRegionCode -ResourceId $InstanceList2[$cnt] -Tags $tag } catch [system.exception]{ $Message = ('An exception adding/modifying tag {0} on EC2Instance {1} - {2}' -f $TagKey, $instancelist2[$cnt],$_.exception.tostring()); DPLOG -type ERROR -Message $Message;Write-Host $Message; } } else{ $Message = ("The Instance {0} doesn't exist." -f $instancelist2[$cnt]); DPLOG -type ERROR -Message $Message;Write-Host $Message; } $cnt++; } } else{ $instancelist = $InstanceList.Substring(0,$InstanceList.IndexOf("(")) #clear everything after the ( $instancelist = $InstanceList.Replace(" ",""); #remove the first space $InstanceFilter = New-Object Amazon.EC2.Model.Filter $InstanceFilter.Name = "instance-id" $InstanceFilter.Value = $instancelist $Exists = Get-EC2Instance -Region $AWSRegionCode -Filter $InstanceFilter if($Exists){ TRY{ $Message = ('Adding tag {0} with Value {1} on EC2Instance {2}' -f $TagKey, $TagValue, $instancelist); DPLOG -type INFO -Message $Message;Write-Host $Message; New-EC2Tag -Region $AWSRegionCode -ResourceId $InstanceList -Tags $tag } Catch [system.exception]{ $Message = ('An exception occurred while adding/modifying tag {0} on EC2Instance {1} - {2}' -f $TagKey, $instancelist,$_.exception.tostring()); DPLOG -type ERROR -Message $Message;Write-Host $Message; } } ELSE{ $Message = ("WARNING The Instance {0} doesn't exist." -f $instancelist); DPLOG -type ERROR -Message $Message;Write-Host $Message; } } $Message = "FUNCTION DPAWSUpdateEC2Tag END"; DPLOG -type INFO -Message $Message;Write-Host $Message; } function DPAWSApplyInboundSGACLRules( [Parameter(Mandatory=$True)] [string]$InboundSG, [Parameter(Mandatory=$True)] [string]$SourceSG, [Parameter(Mandatory=$True)] [string][ValidateSet("AD","Cluster","SQL")]$PortObject) { <# .SYNOPSIS ======================================================================================== DATAPIPE AUTOMATION Apply Inbound rules on Security Group AUTHOR: Justin Procacci SUPPORTED VERSIONS: 2012 R2 CMDLET VERSION: 1.0.1 DATE: 10/9/2014 ======================================================================================== Updates Multiple EC2 Tags .DESCRIPTION REQUIRED - [-InboundSG] - List of instances to add/modify the -Tagkey to the Tagvalue REQUIRED - [-SourceSG] - Region of the instances to update REQUIRED - [-PortObject] - EC2 Tag Key to update AD Ports reference: http://technet.microsoft.com/en-us/library/dd772723%28v=ws.10%29.aspx Cluster Ports reference: http://support.microsoft.com/kb/832017#method5 SQL ports = TCP 1433, TCP 1434, TCP 5022 (Mirroring) EXAMPLE 1: DPAWSApplyInboundSGACLRules -InboundSG "sg-7cf8dd264" -SourceSG "sg-6df8qq245" -PortObject AD EXAMPLE 2: DPAWSApplyInboundSGACLRules -InboundSG "sg-7cf8dd264" -SourceSG "sg-6df8qq245" -PortObject SQL EXAMPLE 3: DPAWSApplyInboundSGACLRules -InboundSG "sg-7cf8dd264" -SourceSG "sg-6df8qq245" -PortObject Cluster #> $Message = "FUNCTION DPAWSApplyInboundSGACLRules Start"; DPLOG -type INFO -Message $Message;Write-Host $Message; $Message = ("Checking CMDLet module dependencies") if ((Get-Module).Name -contains "AWSPowershell"){$Message = ("AWSPowershell is available");DPLOG -type INFO -Message $Message;Write-Host $Message;} else {$Message = ("Importing module AWSPowershell"); DPLOG -type INFO -Message $Message;Write-Host $Message; Import-Module AWSPowershell;} if ((Get-Module).Name -contains "DPWindowsPSM"){$Message = ("DPWindowsPSM is available");DPLOG -type INFO -Message $Message;Write-Host $Message;} else {$Message = ("DPWindowsPSM is not available. Please import and re-run");DPLOG -type ERROR -Message $Message;Write-Host $Message;exit;} # Check if the OS is supported if (((Get-WmiObject Win32_OperatingSystem).Version) -lt "6.2.") { # Unsupported OS $Message = "THIS OS IS NOT SUPPORTED BY THIS FUNCTION" DPLOG -type ERROR -Message $Message Write-Host $Message Exit; } # Check if this is an AWS server if ((((Get-WmiObject Win32_ComputerSystem).PrimaryOwnerName) -ne "Amazon") -and (((Get-WmiObject Win32_ComputerSystem).PrimaryOwnerName) -ne "EC2")) { # Unsupported OS $Message = "THIS FUNCTION CAN ONLY BE RUN ON AN AWS SERVER." DPLOG -type ERROR -Message $Message Write-Host $Message; Exit; } # Import AWS module if required if (((Get-WmiObject Win32_OperatingSystem).Version) -lt "6.2.") {Import-module AWSPowershell }; $AWSRegionCode = ((Invoke-RestMethod "http://169.254.169.254/latest/dynamic/instance-identity/document").Region) $Message = ("Current Region: {0}" -f $AWSRegionCode) DPLOG -type ERROR -Message $Message;Write-Host $Message; $InBoundSGFilter = New-Object Amazon.EC2.Model.Filter $InBoundSGFilter.Name = "group-id" $InBoundSGFilter.Value = $InboundSG $SGexists = Get-EC2SecurityGroup -Region $AWSRegionCode -Filters $InBoundSGFilter if($SGexists) { $message = ("Inbound security group {0} exists." -f $InboundSG); DPLOG -type INFO -Message $Message;Write-Host $Message; } else { $Message = ("Inbound security group {0} doesn't exist." -f $InboundSG); DPLOG -type ERROR -Message $Message;Write-Host $Message; exit; } $SourceSGFilter = New-Object Amazon.EC2.Model.Filter $SourceSGFilter.Name = "group-id" $SourceSGFilter.Value = $SourceSG $exists = Get-EC2SecurityGroup -Region $AWSRegionCode -Filters $SourceSGFilter if($exists) { $message = ("Source security group {0} exists." -f $SourceSG); DPLOG -type INFO -Message $Message;Write-Host $Message; } else { $message = ("Source security group {0} doesn't exist." -f $SourceSG); DPLOG -type ERROR -Message $Message;Write-Host $Message; exit; } $SGSourceGroupID = New-Object Amazon.EC2.Model.UserIdGroupPair $SGSourceGroupID.GroupId = $SourceSG #Start ADPortObjectGroup 2008 R2 + $ADPortAclList = @(); #IpProtocol - tcp $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "53"; $ADPorts.ToPort = "53"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "88"; $ADPorts.ToPort = "88"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "135"; $ADPorts.ToPort = "135"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "139"; $ADPorts.ToPort = "139"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "389"; $ADPorts.ToPort = "389"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "445"; $ADPorts.ToPort = "445"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "464"; $ADPorts.ToPort = "464"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "636"; $ADPorts.ToPort = "636"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "3268"; $ADPorts.ToPort = "3268"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "3269"; $ADPorts.ToPort = "3269"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "5722"; $ADPorts.ToPort = "5722"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "9389"; $ADPorts.ToPort = "9389"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "tcp"; $ADPorts.FromPort = "49152"; $ADPorts.ToPort = "65535"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; #IpProtocol - udp $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "53"; $ADPorts.ToPort = "53"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "88"; $ADPorts.ToPort = "88"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "123"; $ADPorts.ToPort = "123"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "137"; $ADPorts.ToPort = "137"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "138"; $ADPorts.ToPort = "138"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "389"; $ADPorts.ToPort = "389"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "445"; $ADPorts.ToPort = "445"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "464"; $ADPorts.ToPort = "464"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "5355"; $ADPorts.ToPort = "5355"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; $ADPorts = New-Object Amazon.EC2.Model.IpPermission; $ADPorts.IpProtocol = "udp"; $ADPorts.FromPort = "49152"; $ADPorts.ToPort = "65535"; $ADPorts.UserIdGroupPair = $SGSourceGroupID; $ADPortAclList += $AdPorts; #End AD-PortObjectGroup #Start SQL-PortObjectGroup #http://msdn.microsoft.com/en-us/library/cc646023.aspx $SQLPortAclList = @(); #default listening port, Dedicated admin connection, Mirroring endpoint. $SQLPorts = New-Object Amazon.EC2.Model.IpPermission; $SQLPorts.IpProtocol = "tcp"; $SQLPorts.FromPort = "1433"; $SQLPorts.ToPort = "1433"; $SQLPorts.UserIdGroupPair = $SGSourceGroupID; $SQLPortAclList += $SQLPorts; $SQLPorts = New-Object Amazon.EC2.Model.IpPermission; $SQLPorts.IpProtocol = "tcp"; $SQLPorts.FromPort = "1434"; $SQLPorts.ToPort = "1434"; $SQLPorts.UserIdGroupPair = $SGSourceGroupID; $SQLPortAclList += $SQLPorts; $SQLPorts = New-Object Amazon.EC2.Model.IpPermission; $SQLPorts.IpProtocol = "tcp"; $SQLPorts.FromPort = "5022"; $SQLPorts.ToPort = "5022"; $SQLPorts.UserIdGroupPair = $SGSourceGroupID; $SQLPortAclList += $SQLPorts; #END SQL-PortObjectGroup #Start SQL-PortObjectGroup #reference http://support.microsoft.com/kb/832017#method5 - Cluster Service Section $ClusterPortAclList = @(); $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "tcp"; $ClusterPorts.FromPort = "135"; $ClusterPorts.ToPort = "135"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "tcp"; $ClusterPorts.FromPort = "445"; $ClusterPorts.ToPort = "445"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "tcp"; $ClusterPorts.FromPort = "3343"; $ClusterPorts.ToPort = "3343"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "udp"; $ClusterPorts.FromPort = "49152"; $ClusterPorts.ToPort = "65535"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "udp"; $ClusterPorts.FromPort = "137"; $ClusterPorts.ToPort = "137"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "udp"; $ClusterPorts.FromPort = "3343"; $ClusterPorts.ToPort = "3343"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; $ClusterPorts = New-Object Amazon.EC2.Model.IpPermission; $ClusterPorts.IpProtocol = "icmp"; $ClusterPorts.FromPort = "0"; $ClusterPorts.ToPort = "-1"; $ClusterPorts.UserIdGroupPair = $SGSourceGroupID; $ClusterPortAclList += $ClusterPorts; Switch($PortObject) { "AD" {$PortObjectList = $ADPortAclList; break;} "Cluster" {$PortObjectList = $ClusterPortAclList; break;} "SQL" {$PortObjectList = $SQLPortAclList; break;} default {$message = ("No Value Selected;"); DPLOG -type ERROR -Message $Message;Write-Host $Message; exit;} } $cnt = 0; while ($cnt -lt $PortObjectList.Count) { $RuleExists = (((Get-EC2SecurityGroup -Region $AWSRegionCode -Filters $InboundFilter).IpPermissions | ?{$_.FromPort -eq $PortObjectList[$cnt].FromPort -and $_.IpProtocol -eq $PortObjectList[$cnt].IpProtocol}).useridgrouppairs.groupid) -contains $SGSourceGroupID.Groupid if ($RuleExists) { $Message = ("Rule [IpProtocol: {0}, FromPort: {1}, ToPort: {2} SourceSecurityGroupID: {3}] rule is already in place." -f $PortObjectList[$cnt].IpProtocol, $PortObjectList[$cnt].FromPort, $PortObjectList[$cnt].ToPort, $PortObjectList[$cnt].UserIdGroupPair.groupid) DPLOG -type ERROR -Message $Message;Write-Host $Message; } else { $Message = ("Rule [IpProtocol: {0}, FromPort: {1}, ToPort: {2} SourceSecurityGroupID: {3}] rule is being added." -f $PortObjectList[$cnt].IpProtocol, $PortObjectList[$cnt].FromPort, $PortObjectList[$cnt].ToPort, $PortObjectList[$cnt].UserIdGroupPair.groupid) DPLOG -type SUCCESS -Message $Message;Write-Host $Message; TRY{ Grant-EC2SecurityGroupIngress -GroupId $InboundSG -IpPermissions $PortObjectList[$cnt]; } CATCH [System.Exception]{ $Message = ("An exception has be encountered: {0} " -f $_.exception.tostring());DPLOG -type ERROR -Message $Message;Write-Host $Message; } } $cnt++; }; $Message = "FUNCTION DPAWSApplyInboundSGACLRules END"; DPLOG -type INFO -Message $Message;Write-Host $Message; } Function DPExtractZipFile ( [Parameter(Mandatory=$True)] [string]$ZipFile, [Parameter(Mandatory=$True)] [string]$TargetPath ) { $shell=new-object -com shell.application # Set the folder object to the path you have the zip file(s) in and changes dir to that folder if (test-path -Path $targetpath) { write-host "path exists"; } else { write-host "Create path"; mkdir $targetpath} $CurrentLocation=set-location -PassThru -Path $targetpath $CurrentPath=$CurrentLocation.path $Location=$shell.namespace($CurrentPath) $UnZipFile = get-childitem $ZipFile $UnZipFile.fullname | out-default $ZipFolder = $shell.namespace($UnZipFile.fullname) $Location.Copyhere($ZipFolder.items()) } Function DPDownloadFromWeb( [Parameter(Mandatory=$True)] [string]$URL, [Parameter(Mandatory=$True)] [string]$Path ) { $client = new-object System.Net.WebClient $client.DownloadFile( $url, $path ) } Function SQL2008R2ENTInstall( [Parameter(Mandatory=$False)] [String]$InstanceName="MSSQLSERVER", [Parameter(Mandatory=$True)] [string]$MediaRootLocation , [Parameter(Mandatory=$False)] [string]$SQLSRVAcct="NT AUTHORITY\SYSTEM" , [Parameter(Mandatory=$False)] [string]$SQLSVCPASSWORD , [Parameter(Mandatory=$False)] [string]$SQLAGTSrvAcct="NT AUTHORITY\SYSTEM" , [Parameter(Mandatory=$False)] [string]$SQLAGTpassword , [Parameter(Mandatory=$True)] [string]$SAPassword , [Parameter(Mandatory=$False)] [string]$SystemRootVolume , [Parameter(Mandatory=$False)] [string]$UserDataVolume , [Parameter(Mandatory=$False)] [string]$UserLogVolume , [Parameter(Mandatory=$False)] [string]$TempdbVolume , [Parameter(Mandatory=$False)] [string]$DumpVolume) { $SQLVersion = "10_50"; $MSSQLRoot=("MSSQL{0}.{1}" -f $SQLVersion, $InstanceName); $MSASRoot=("MSAS{0}.{1}" -f $SQLVersion, $InstanceName); [string]$CurrentUser = ([Environment]::UserDomainName + "\" + [environment]::UserName); $InstallSQLDir ="C:\Program Files\Microsoft SQL Server" if (!$SystemRootVolume -or $SystemRootVolume -eq "C") { $SystemRootVolume = ("{0}" -f $InstallSQLDir); $SSASRootDir = ("{0}\{1}" -f $InstallSQLDir, $MSASRoot) } else {$SystemRootVolume+=":";$SSASRootDir=$SystemRootVolume+"\" + $MSASRoot} if (!$UserDataVolume -or $UserDataVolume -eq "C") { $UserDataVolume = $InstallSQLDir } else {$UserDataVolume+=":"} if (!$UserLogVolume -or $UserLogVolume -eq "C") { $UserLogVolume = $InstallSQLDir } else {$UserLogVolume+=":"} if (!$DumpVolume -or $DumpVolume -eq "C") { $DumpVolume = $InstallSQLDir } else {$DumpVolume+=":"} if (!$TempdbVolume -or $TempdbVolume -eq "C") { $TempdbVolume = $InstallSQLDir } else {$TempdbVolume+=":"} if ($InstanceName -ne "MSSQLSERVER"){$BrowserStartupMode = "Automatic"} else {$BrowserStartupMode = "Disabled"} $BaseParameters= @" ;Base parameters [SQLSERVER2008] ADDCURRENTUSERASSQLADMIN="False" TCPENABLED="1" NPENABLED="0" BROWSERSVCSTARTUPTYPE="$BrowserStartupMode" RSSVCACCOUNT="NT AUTHORITY\NetworkService" RSSVCSTARTUPTYPE="Disabled" RSINSTALLMODE="FilesOnlyMode" FTSVCACCOUNT="NT AUTHORITY\LOCAL SERVICE" ACTION="Install" FEATURES=SQLENGINE,REPLICATION,FULLTEXT,AS,RS,BIDS,CONN,IS,BC,SDK,BOL,SSMS,ADV_SSMS,SNAC_SDK,OCS HELP="False" INDICATEPROGRESS="False" QUIET="True" QUIETSIMPLE="False" X86="False" ENU="True" ERRORREPORTING="False" INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server" INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server" INSTANCEDIR="C:\Program Files\Microsoft SQL Server" SQMREPORTING="False" AGTSVCSTARTUPTYPE="Automatic" ISSVCSTARTUPTYPE="Automatic" ISSVCACCOUNT="NT AUTHORITY\NetworkService" ASSVCACCOUNT="NT AUTHORITY\SYSTEM" ASSVCSTARTUPTYPE="Disabled" ASCOLLATION="Latin1_General_CI_AS" ASPROVIDERMSOLAP="1" FARMADMINPORT="0" SQLSVCSTARTUPTYPE="Automatic" FILESTREAMLEVEL="0" ENABLERANU="False" SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS" SECURITYMODE="SQL" PCUSOURCE="$MediaRootLocation\PCU" ;Custom parameters INSTALLSQLDATADIR="$SystemRootVolume" SQLUSERDBDIR="$UserDataVolume\$MSSQLRoot\MSSQL\Data" SQLUSERDBLOGDIR="$UserLogVolume\$MSSQLRoot\MSSQL\Log" SQLTEMPDBDIR="$TempdbVolume\$MSSQLRoot\MSSQL\Data" SQLBACKUPDIR="$DumpVolume\$MSSQLRoot\MSSQL\Backup" INSTANCEID="$InstanceName" INSTANCENAME="$InstanceName" AGTSVCACCOUNT="$SQLAGTSrvAcct" ASDATADIR="$SSASRootDir\OLAP\Data" ASLOGDIR="$SSASRootDir\OLAP\Log" ASBACKUPDIR="$SSASRootDir\OLAP\Backup" ASTEMPDIR="$SSASRootDir\OLAP\Temp" ASCONFIGDIR="$SSASRootDir\OLAP\Config" ASSYSADMINACCOUNTS="Administrator" SQLSVCACCOUNT="$SQLSRVAcct" SQLSYSADMINACCOUNTS="Administrator" sapwd="$SAPassword" "@ if($SQLSVCPASSWORD.Length -gt 0) { $BaseParameters+=@" SQLSVCPASSWORD="$SQLSVCPASSWORD" "@ } IF ($SQLAGTpassword.Length -gt 0) { $BaseParameters+=@" AGTSVCPASSWORD="$SQLAGTpassword" "@ } if ((Test-Path -Path "c:\DPAutomation\") -eq $false) {MKDIR "c:\DPAutomation\" } Set-Content -Value $BaseParameters -Path "c:\DPAutomation\SQLInstallConfiguration.ini" $cmd = ($MediaRootLocation + "\setup.exe") & $cmd /configurationfile="c:\DPAutomation\SQLInstallConfiguration.ini" /IACCEPTSQLSERVERLICENSETERMS }