Skip to content

Instantly share code, notes, and snippets.

@jamie-tillman
Last active June 26, 2024 18:41
Show Gist options
  • Save jamie-tillman/2c3b73071aa483c1e5e0bc45b3857243 to your computer and use it in GitHub Desktop.
Save jamie-tillman/2c3b73071aa483c1e5e0bc45b3857243 to your computer and use it in GitHub Desktop.
Boxstarter script to install Scenario private powershell module - requires internal usercode and password
Write-Warning "WARNING: This script will probably cause your computer to automatically restart without warning at least a few times during the installation process. It's recommended that you exit all other programs to avoid data loss. If you don't want to do this right now, hit CTRL+C to exit"
pause
Update-ExecutionPolicy Unrestricted
#Boxstarter.WinConfig\Install-WindowsUpdate -getUpdatesFromMS -acceptEula
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco feature enable -n=allowGlobalConfirmation
choco feature enable -n=useRememberedArgumentsForUpgrades
choco install boxstarter -y
choco install dotnet-6.0-sdk -y
choco install visualstudio2022buildtools -y
choco install visualstudio2022-workload-webbuildtools --package-parameters "--includeRecommended" -y
choco install visualstudio2022-workload-nodebuildtools -y
choco install visualstudio2022-workload-manageddesktopbuildtools -y
choco install visualstudio2022-workload-databuildtools -y
choco install netfx-4.7.2 -y
choco install nodejs --version=16.18.1
# PowerShellGet. Do this early as reboots are required
$powershellGet = Get-InstalledModule -Name PowerShellGet -ErrorAction SilentlyContinue
if ($null -eq $powershellGet -or $powershellGet.Version -lt "1.4.4") {
Write-Host "Install-Module PowerShellGet"
Install-Module -Name "PowerShellGet" -AllowClobber -Force -Scope AllUsers -Confirm
# Exit equivalent
Invoke-Reboot
}
Write-Host "Excluding appdata NPM folder and Node.JS install folder from Windows Defender."
Add-MpPreference -ExclusionPath ([System.Environment]::ExpandEnvironmentVariables("%APPDATA%\npm\"))
Add-MpPreference -ExclusionPath (Get-ItemProperty "HKLM:SOFTWARE\Node.js" | Select-Object -Property InstallPath)
Write-Host "Excluding node and build related executables from Windows Defender."
("node", "node.exe", "msbuild", "npx") | foreach {Add-MpPreference -ExclusionProcess $_}
# This will install NuGet module if missing
Get-PackageProvider -Name NuGet -ForceBootstrap
Set-PSRepository PSGallery -InstallationPolicy Trusted
Install-Module dbatools -Repository PSGallery -Confirm:$false
Install-Module VSSetup -Repository PSGallery -Confirm:$false
Set-DbatoolsConfig -Name Import.EncryptionMessageCheck -Value $false -PassThru | Register-DbatoolsConfig
Set-DbatoolsInsecureConnection
#Import-Module $PSScriptRoot\..\Scenario.psm1
$shortcutContent = "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";
$desktopFolderPath = ([Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop))
$shortcutPath = [System.IO.Path]::Combine($desktopFolderPath, "Run-Me.lnk")
$scriptPath = [System.IO.Path]::Combine($desktopFolderPath, "Install-Scenario.ps1")
[IO.File]::WriteAllBytes($shortcutPath, [Convert]::FromBase64String($shortcutContent));
$scriptContent = @'
$ErrorActionPreference = "Stop";
iex "& { $(irm https://aka.ms/install-artifacts-credprovider.ps1) }"
$repoUrl = "https://pkgs.dev.azure.com/canopysoftware/_packaging/Powershell-Modules/nuget/v2";
$repo = "PowershellDevOps";
if ($null -eq (Get-PSRepository -Name $repo -ErrorAction Ignore)) {
Register-PSRepository -Name $repo -SourceLocation $repoUrl -PublishLocation $repoUrl -InstallationPolicy Trusted;
}
if ($null -eq (Get-PackageSource -Name $repo -ErrorAction Ignore)) {
Register-PackageSource -Name $repo -Location $repoUrl -ProviderName NuGet -Trusted -SkipValidate;
}
dotnet nuget add source https://pkgs.dev.azure.com/canopysoftware/_packaging/Canopy-Internal/nuget/v3/index.json --name Canopy-Internal
Install-Module Scenario -Confirm:$false;
Import-Module Scenario;
Install-ScenarioSystem;
$desktopFolderPath = ([Environment]::GetFolderPath([Environment+SpecialFolder]::Desktop))
$shortcutPath = [System.IO.Path]::Combine($desktopFolderPath, "Run-Me.lnk")
$scriptPath = [System.IO.Path]::Combine($desktopFolderPath, "Install-Scenario.ps1")
Remove-Item $shortcutPath -Force;
Remove-Item $scriptPath -Force;
Write-Host "Scenario system setup complete. Exiting...";
Sleep -Seconds 5
'@;
Set-Content -Value $scriptContent -Path $scriptPath
Write-Host @'
Preliminary system setup is complete. Now you should double-click the "Run-Me" shortcut on your desktop to install the Scenario module and supporting services.
'@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment