param ( [string]$DomainName = "contoso.com", #[string]$SvcUsername = "svc_websql01", [string]$SvcUsername = "svc_mssql02", [string]$SvcPassword = "Svc1234!" ) $scriptName = $MyInvocation.MyCommand.Name $logFile = "C:\Logs\${scriptName}_log.txt" $NetBiosName = $DomainName.Split(".")[0].ToUpper() $wwwroot1 = "C:\inetpub\wwwroot" $wwwroot2 = "C:\inetpub\wwwroot2" $wwwroot3 = "C:\inetpub\wwwroot3" Start-Transcript -Path $logFile -Append try { New-Item -Path "C:\setup\media" -ItemType "Directory" -Force @" ;SQL Server Configuration File [OPTIONS] IACCEPTSQLSERVERLICENSETERMS="True" ACTION="Install" ENU="True" QUIET="True" QUIETSIMPLE="False" UpdateEnabled="False" ERRORREPORTING="False" USEMICROSOFTUPDATE="False" FEATURES=SQLENGINE,FULLTEXT UpdateSource="MU" HELP="False" INDICATEPROGRESS="False" X86="False" INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server" INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server" INSTANCENAME="SQLEXPRESS" SQMREPORTING="False" INSTANCEID="SQLEXPRESS" RSINSTALLMODE="DefaultNativeMode" INSTANCEDIR="C:\Program Files\Microsoft SQL Server" AGTSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" AGTSVCSTARTUPTYPE="Automatic" COMMFABRICPORT="0" COMMFABRICNETWORKLEVEL="0" COMMFABRICENCRYPTION="0" MATRIXCMBRICKCOMMPORT="0" SQLSVCSTARTUPTYPE="Automatic" FILESTREAMLEVEL="0" ENABLERANU="False" SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS" SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" SAPWD="$SvcPassword" SQLSYSADMINACCOUNTS="BUILTIN\Administrators" ADDCURRENTUSERASSQLADMIN="True" TCPENABLED="1" NPENABLED="0" BROWSERSVCSTARTUPTYPE="Disabled" RSSVCSTARTUPTYPE="manual" FTSVCACCOUNT="NT Service\MSSQLFDLauncher" "@ | Out-File "C:\setup\sql_conf.ini" Start-Process -FilePath "C:\setup\SQL2019-SSEI-Expr.exe" -ArgumentList "/configurationfile=C:\setup\sql_conf.ini /IACCEPTSQLSERVERLICENSETERMS /MEDIAPATH=C:\setup\media /QUIET /HIDEPROGRESSBAR" -Wait Set-ItemProperty -Path "HKLM:\Software\Microsoft\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\IPAll" -Name "TcpPort" -Value "1433" -Force Restart-Service -Name "MSSQL`$SQLEXPRESS" New-NetFirewallRule -DisplayName "SQLServer default instance" -Direction Inbound -LocalPort 1433 -Protocol TCP -Action Allow $env:Path += ";C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn" SqlCmd -E -Q "CREATE LOGIN [$NetBiosName\$SvcUsername] FROM WINDOWS" SqlCmd -E -Q "SP_ADDSRVROLEMEMBER '$NetBiosName\$SvcUsername', 'SYSADMIN'" SqlCmd -E -Q "ALTER LOGIN sa ENABLE" SqlCmd -E -Q "ALTER LOGIN sa WITH PASSWORD = '$SvcPassword', CHECK_POLICY=OFF" Write-Host "[inf] Added $NetBiosName\$SvcUsername as MSSQL login and sysadmin" Write-Host "[inf] Enabled SA login" } catch { Write-Host "[err] SQL Server setup failed" } try { Install-WindowsFeature -Name Web-Server -IncludeManagementTools Install-WindowsFeature -Name Web-Asp-Net45 Write-Host "[inf] Installed IIS and ASP.NET" } catch { Write-Host "[err] Failed to install IIS and ASP.NET" } @" using System; using System.IO; using System.Web.UI; public partial class UploadPage : Page { protected void UploadFile(object sender, EventArgs e) { if (fileUpload.PostedFile != null && fileUpload.PostedFile.ContentLength > 0) { try { string filename = Path.GetFileName(fileUpload.PostedFile.FileName); fileUpload.PostedFile.SaveAs(Server.MapPath(filename)); lblMessage.Text = "File uploaded successfully!"; } catch (Exception ex) { lblMessage.Text = "Error: " + ex.Message; } } else { lblMessage.Text = "Please select a file to upload."; } } } "@ | Out-File "$wwwroot1\upload.aspx.cs" -Force @" <%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="UploadPage" %> File Upload Page


"@ | Out-File "$wwwroot1\upload.aspx" -Force @" "@ | Out-File "$wwwroot1\Web.config" -Force try { New-WebSite -Name "MyASPXSite" -Port 80 -PhysicalPath $wwwroot1 -ApplicationPool "DefaultAppPool" Set-ItemProperty "IIS:\AppPools\DefaultAppPool" -Name processModel -Value @{userName="$SvcUsername";password="$SvcPassword";identityType=3} New-NetFirewallRule -DisplayName "HTTP (80)" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow Restart-WebAppPool -Name "DefaultAppPool" Write-Host "[inf] Site 1 created on port 80" } catch { Write-Host "[err] Failed to create site 1" } try { $svcRule = New-Object System.Security.AccessControl.FileSystemAccessRule("$DomainName\$SvcUsername", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow") $acl = Get-Acl $wwwroot1 $acl.SetAccessRule($svcRule) Set-Acl -Path $wwwroot1 -AclObject $acl Write-Host "[inf] ACL set for $wwwroot1" } catch { Write-Host "[err] Failed to set ACL for $wwwroot1" } try { Copy-Item $wwwroot1 -Destination $wwwroot2 -Recurse -Force New-WebAppPool -Name "DefaultAppPool2" New-WebSite -Name "MyASPXSite2" -Port 8080 -PhysicalPath $wwwroot2 -ApplicationPool "DefaultAppPool2" Set-ItemProperty "IIS:\AppPools\DefaultAppPool2" -Name processModel -Value @{identityType=2} New-NetFirewallRule -DisplayName "HTTP (8080)" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow $acl = Get-Acl $wwwroot2 $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS_IUSRS", "Modify", "ContainerInherit,ObjectInherit", "None", "Allow") $acl.SetAccessRule($rule) Set-Acl -Path $wwwroot2 -AclObject $acl Restart-WebAppPool -Name "DefaultAppPool2" Write-Host "[inf] Site 2 created on port 8080" } catch { Write-Host "[err] Failed to create site 2" } try { Copy-Item $wwwroot1 -Destination $wwwroot3 -Recurse -Force New-WebAppPool -Name "SqlQueryAppPool" New-WebSite -Name "SqlQuerySite" -Port 9090 -PhysicalPath $wwwroot3 -ApplicationPool "SqlQueryAppPool" Set-ItemProperty "IIS:\AppPools\SqlQueryAppPool" -Name processModel -Value @{userName="$SvcUsername";password="$SvcPassword";identityType=3} New-NetFirewallRule -DisplayName "HTTP (9090)" -Direction Inbound -Protocol TCP -LocalPort 9090 -Action Allow @" <%@ Page Language="C#" Debug="true" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.SqlClient" %> SQL Query Tester

Enter a SQL Query





"@ | Out-File "$wwwroot3\sqlquery.aspx" -Force Restart-WebAppPool -Name "SqlQueryAppPool" Write-Host "[inf] Site 3 created on port 9090 with SQL query page" } catch { Write-Host "[err] Failed to create SQL query site" } Stop-Transcript