How-To: Install your apps, modules and settings the easy way

%3CLINGO-SUB%20id%3D%22%5C%26quot%3Blingo-sub-3139719%5C%26quot%3B%22%20slang%3D%22%5C%26quot%3Ben-US%5C%26quot%3B%22%3EHowto%3A%20Install%20your%20apps%2C%20modules%20and%20settings%20the%20easy%20way%26lt%3B%5C%2Flingo-sub%26gt%3B%3CLINGO-BODY%20id%3D%22%5C%26quot%3Blingo-body-3139719%5C%26quot%3B%22%20slang%3D%22%5C%26quot%3Ben-US%5C%26quot%3B%22%3E%3CP%3EWhenever%20I%20reinstall%20my%20Windows%20laptop%2C%20I%20have%20a%20lot%20of%20apps%2C%20modules%2C%20RSAT%20Tools%2C%20Sysinterals%20tools%26nbsp%3B%20and%20settings%20that%20need%20to%20be%20reconfigured.%20So..%20Let's%20automate%20that%20%3A)%26lt%3B%5C%2Fimg%26gt%3B%20Below%20is%20my%20install%20script%20which%20you%20can%20use%20to%20install%20everything%2C%20or%20just%20the%20programs%20or%20perhaps%20just%20the%20PowerShell%20modules.%20Options%20are%20there%20to%20do%20so%20and%20you%20can%20add%2Fremove%20things%20in%20the%20JSON%20file%20easily%20and%20let%20it%20run%20again.%20Just%20put%20the%20three%20files%20in%20one%20location%2C%20run%20install.cmd%20as%20Administrator%20and%20lean%20back...%3CBR%20%2F%3E%3CBR%20%2F%3EShortcuts%20for%20newly%20installed%20software%20will%20be%20removed%20from%20your%20desktop%2C%20hate%20those%20%3B)%26lt%3B%5C%2Fimg%26gt%3B%20%2C%20and%20programs%20that%20start%20automatically%20after%20installing%20will%20be%20closed.%20Be%20aware%20of%20the%20fact%20that%20your%20machine%20might%20restart%20during%20installation%2C%20save%20your%20work%20and%20you%20can%20re-run%20the%20script%20to%20continue%20installing%20the%20rest%20(It%20will%20check%20and%20skip%20things%20that%20are%20already%20installed)%3CBR%20%2F%3E%3CBR%20%2F%3E%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EInstall.cmd%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3CPRE%20class%3D%22%5C%26quot%3Blia-code-sample%22%20language-bash%3D%22%22%3E%3CCODE%3E%40echo%20off%5CnTITLE%20Installing%20Apps%2C%20Features%20and%20PowerShell%20Modules...%5Cnecho%20Your%20computer%20might%20restart%2C%20please%20save%20your%20work%20before%20continuing!%5Cnecho%20After%20restart%2C%20you%20can%20restart%20this%20script%20to%20finish%20installation%5Cnpause%5Cnpowershell%20-executionpolicy%20bypass%20-noprofile%20-file%20%5C%22%25~dp0install_apps.ps1%5C%22%20-All%5Cnecho%20Logging%20is%20available%20in%20%25Temp%25%5C%5CInstall.log%5Cnecho%20Press%20any%20to%20update%20installed%20apps%20or%20CTRL-C%20to%20exit%20and%20then%20reboot%20your%20system%20manually%5Cnpause%5Cnwinget%20upgrade%20--all%20--silent%20--force%5Cnecho.%20%5Cnecho%20Done%20updating%2C%20press%20any%20key%20to%20quit%20and%20reboot%20your%20system%20manually%5Cnpause%26lt%3B%5C%2Fcode%26gt%3B%26lt%3B%5C%2Fpre%26gt%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3EInstall_Apps.ps1%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3CPRE%20class%3D%22%5C%26quot%3Blia-code-sample%22%20language-powershell%3D%22%22%3E%3CCODE%3E%26lt%3B%23%5Cn.SYNOPSIS%5Cn%5CnInstalls%20Programs%2C%20Modules%2C%20Features%20and%20settings%20using%20Winget%20and%20PowerShell%5Cn%5Cn.DESCRIPTION%5Cn%5CnInstalls%2FConfigures%20all%20options%20from%20the%20.json%20file%5Cn%5Cn.PARAMETER%20All%5CnInstall%20all%20Programs%2C%20Modules%2C%20Features%20and%20Settings%5Cn%5Cn.PARAMETER%20Apps%5CnInstall%20all%20Software%5Cn%5Cn.PARAMETER%20Features%5CnInstall%20all%20Windows%20Features%5Cn%5Cn.PARAMETER%20MicrosftVCRuntime%5CnInstall%20all%20Microsoft%20VC%2B%2B%20Runtimes%5Cn%5Cn.PARAMETER%20PowerShellCommands%5CnExecute%20all%20PowerShell%20commands%20like%20Update-Help%5Cn%5Cn.PARAMETER%20PowerShellModules%5CnInstall%20all%20PowerShell%20Modules%5Cn%5Cn.PARAMETER%20PowerShellModulesUpdate%5CnUpdate%20all%20installed%20PowerShell%20Modules%20to%20the%20latest%20version%5Cn%5Cn.PARAMETER%20PowerShellProfile%5CnUpdate%20the%20PowerShell%20Profile%5Cn%5Cn.PARAMETER%20RSATTools%5CnInstall%20the%20Windows%20Remote%20System%20Administration%20Tools%5Cn%5Cn.PARAMETER%20%24SCCMTools%5CnInstall%20the%20System%20Center%20Configuration%20Manager%20tools%20like%20CMTrace%5Cn%5Cn.PARAMETER%20SysInternalsSuite%5CnInstall%20the%20Windows%20Remote%20System%20Administration%20Tools%5Cn%5Cn.PARAMETER%20IntuneWinAppUtil%5CnInstall%20the%20IntuneWinAppUtil%20in%20c%3A%5C%5Cwindows%5C%5Csystem32%5Cn%5Cn.INPUTS%5Cn%5CnDefaults%20to%20-All%20if%20no%20other%20Parameters%20are%20specified%5Cn%5Cn.OUTPUTS%5Cn%5CnScreen%20output%20and%20TransAction%20log%20which%20is%20available%20in%20%25Temp%25%5C%5CInstall.log%5Cn%5Cn.EXAMPLE%5Cn%5CnPS%26gt%3B%20Install_Apps.ps1%20-Apps%5CnInstalls%20all%20Applications%5Cn%5Cn.EXAMPLE%5Cn%5CnPS%26gt%3B%20Install_Apps.ps1%20-SCCMTools%20-PowerShellModule%5CnInstalls%20the%20System%20Center%20Configuration%20Manager%20Tools%20and%20installs%20all%20PowerShell%20Modules%5Cn%5Cn.LINK%5Cn%5CnNone%5Cn%5Cn%23%26gt%3B%5Cn%5Cn%23Parameters%5Cn%5BCmdletBinding(DefaultParameterSetName%20%3D%20%5C%22All%5C%22)%5D%5Cnparam%20(%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24False%2C%20HelpMessage%20%3D%20%5C%22Install%20all%20Software%2C%20Modules%2C%20Features%20and%20Settings%5C%22%2C%20ParameterSetName%20%3D%20%5C%22All%5C%22)%5D%5BSwitch%5D%24All%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20all%20Software%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24Apps%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20all%20Windows%20Features%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24Features%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20all%20Microsoft%20VC%2B%2B%20Runtimes%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24MicrosftVCRuntime%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Execute%20all%20PowerShell%20commands%20like%20Update-Help%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24PowerShellCommands%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20all%20PowerShell%20Modules%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24PowerShellModules%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Update%20all%20installed%20PowerShell%20Modules%20to%20the%20latest%20version%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24PowerShellModulesUpdate%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Update%20the%20PowerShell%20Profile%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24PowerShellProfile%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20the%20Windows%20Remote%20System%20Administration%20Tools%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24RSATTools%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20the%20System%20Center%20Configuration%20Manager%20tools%20like%20CMTrace%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24SCCMTools%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20all%20SysInternals%20Suite%20tools%20and%20add%20them%20to%20the%20system%20path%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24SysInternalsSuite%2C%5Cn%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%5C%22Install%20the%20IntuneWinAppUtil%20to%20c%3A%5C%5Cwindows%5C%5Csystem32%5C%22%2C%20ParameterSetName%20%3D%20%5C%22Optional%5C%22)%5D%5BSwitch%5D%24IntuneWinAppUtil%5Cn)%5Cnif%20(%24PSCmdlet.ParameterSetName%20-eq%20%5C'All%5C')%20%7B%5Cn%20%20%20%20Write-Host%20No%20parameter%20was%20specified%20and%20using%20all%20options%20-ForegroundColor%20Green%5Cn%20%20%20%20%24All%20%3D%20%24True%5Cn%7D%5Cn%5Cn%23Requires%20-RunAsAdministrator%5Cn%23Start%20Transcript%20logging%20in%20Temp%20folder%5CnStart-Transcript%20%24ENV%3ATEMP%5C%5Cinstall.log%5Cn%5Cn%23Set-Executionpolicy%20and%20no%20prompting%5CnSet-ExecutionPolicy%20Bypass%20-Force%3A%24True%20-Confirm%3A%24false%20-ErrorAction%20SilentlyContinue%5CnSet-Variable%20-Name%20%5C'ConfirmPreference%5C'%20-Value%20%5C'None%5C'%20-Scope%20Global%5Cn%5Cn%23Change%20invoke-webrequest%20progress%20bar%20to%20hidden%20for%20faster%20downloads%5Cn%24ProgressPreference%20%3D%20%5C'SilentlyContinue%5C'%5Cn%5Cn%23Import%20list%20of%20apps%2C%20features%20and%20modules%20that%20can%20be%20installed%20using%20json%20file%5Cn%24json%20%3D%20Get-Content%20%5C%22%24(%24PSScriptRoot)%5C%5CInstall_apps.json%5C%22%20%7C%20ConvertFrom-Json%5Cn%5Cn%23Check%20if%20Winget%20is%20installed%2C%20if%20not%20install%20it%20by%20installing%20VCLibs%20(Prerequisite)%20followed%20by%20Winget%20itself%5Cnif%20(%24Apps%20-or%20%24MicrosftVCRuntime%20-or%20%24All)%20%7B%5Cn%20%20%20%20if%20(!(Get-AppxPackage%20-Name%20Microsoft.Winget.Source))%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Winget%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Faka.ms%2FMicrosoft.VCLibs.x64.14.00.Desktop.appx%20-Outfile%20%24ENV%3ATEMP%5C%5CMicrosoft.VCLibs.x64.14.00.Desktop.appx%5Cn%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Faka.ms%2Fgetwinget%20-Outfile%20%24ENV%3ATEMP%5C%5Cwinget.msixbundle%20%20%20%20%5Cn%20%20%20%20%20%20%20%20Add-AppxPackage%20%24ENV%3ATEMP%5C%5CMicrosoft.VCLibs.x64.14.00.Desktop.appx%20-ErrorAction%20SilentlyContinue%5Cn%20%20%20%20%20%20%20%20Add-AppxPackage%20-Path%20%24ENV%3ATEMP%5C%5Cwinget.msixbundle%20-ErrorAction%20SilentlyContinue%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24MicrosftVCRuntime%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Install%20Microsoft%20Visual%20C%2B%2B%20Runtimes%20using%20WinGet%5Cn%20%20%20%20Write-Host%20Installing%20Microsoft%20Visual%20C%2B%2B%20Runtime%20versions%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20%24CurrentVC%20%3D%20Get-WmiObject%20-Class%20Win32_Product%20-Filter%20%5C%22Name%20LIKE%20%5C'%25Visual%20C%2B%2B%25%5C'%5C%22%20-ErrorAction%20SilentlyContinue%20%7C%20Select-Object%20Name%5Cn%20%20%20%20Foreach%20(%24App%20in%20%24json.MicrosftVCRuntime)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24App%20is%20already%20installed...%5Cn%20%20%20%20%20%20%20%20if%20(!(%24CurrentVC%20%7C%20Select-String%20%24App.split(%5C'%2B%5C')%5B2%5D.SubString(0%2C%204)%20%7C%20Select-String%20%24App.split(%5C'-%5C')%5B1%5D))%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24App%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20winget.exe%20install%20%24App%20--silent%20--force%20--source%20winget%20--accept-package-agreements%20--accept-source-agreements%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24Apps%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Install%20applications%20using%20WinGet%5Cn%20%20%20%20Write-Host%20Installing%20Applications%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20Foreach%20(%24App%20in%20%24json.Apps)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24App%20is%20already%20installed...%5Cn%20%20%20%20%20%20%20%20winget.exe%20list%20--id%20%24App%20--accept-source-agreements%20%7C%20Out-Null%5Cn%20%20%20%20%20%20%20%20if%20(%24LASTEXITCODE%20-eq%20%5C'-1978335212%5C')%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24App.Split(%5C'.%5C')%5B1%5D%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20winget.exe%20install%20%24App%20--silent%20--force%20--source%20winget%20--accept-package-agreements%20--accept-source-agreements%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Foreach%20(%24Application%20in%20%24json.ProcessesToKill)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20get-process%20%24Application%20-ErrorAction%20SilentlyContinue%20%7C%20Stop-Process%20-Force%3A%24True%20-Confirm%3A%24false%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%20%5Cn%20%20%20%20%7D%5Cn%20%20%20%20%23Clean-up%20downloaded%20Winget%20Packages%5Cn%20%20%20%20Remove-Item%20%24ENV%3ATEMP%5C%5CWinget%20-Recurse%20-Force%3A%24True%20-ErrorAction%3ASilentlyContinue%5Cn%5Cn%20%20%20%20%23Cleanup%20shortcuts%20from%20installed%20applications%5Cn%20%20%20%20Foreach%20(%24File%20in%20%24json.filestoclean)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Cleaning%20%24File%20from%20personal%20ad%20public%20Windows%20Desktop%20-ForegroundColor%20Green%5Cn%20%20%20%20%20%20%20%20%24UserDesktop%20%3D%20(%5BEnvironment%5D%3A%3AGetFolderPath(%5C%22Desktop%5C%22))%5Cn%20%20%20%20%20%20%20%20Get-ChildItem%20C%3A%5C%5Cusers%5C%5Cpublic%5C%5CDesktop%5C%5C%24File%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%5Cn%20%20%20%20%20%20%20%20Get-ChildItem%20%24UserDesktop%5C%5C%24File%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%5Cn%20%20%20%20%20%20%20%20Get-ChildItem%20C%3A%5C%5Cusers%5C%5Cpublic%5C%5CDesktop%5C%5C%24File%20-Hidden%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%5Cn%20%20%20%20%20%20%20%20Get-ChildItem%20%24UserDesktop%5C%5C%24File%20-Hidden%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24SCCMTools%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Download%20and%20install%20System%20Center%202012%20R2%20Configuration%20Manager%20Toolkit%20for%20CMTRACE%20tool%5Cn%20%20%20%20Write-Host%20Checking%20if%20System%20Center%202012%20R2%20Configuration%20Manager%20Toolkit%20is%20already%20installed%20-ForegroundColor%20Green%5Cn%20%20%20%20if%20(!(Test-Path%20%5C'C%3A%5C%5CProgram%20Files%20(x86)%5C%5CConfigMgr%202012%20Toolkit%20R2%5C'))%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20SCCM%202012%20R2%20Toolkit%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F5%2F0%2F8%2F508918E1-3627-4383-B7D8-AA07B3490D21%2FConfigMgrTools.msi%20-UseBasicParsing%20-Outfile%20%24ENV%3ATEMP%5C%5CConfigMgrTools.msi%5Cn%20%20%20%20%20%20%20%20msiexec.exe%20%2Fi%20%24ENV%3ATEMP%5C%5CConfigMgrTools.msi%20%2Fqn%20%20%20%20%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24SysInternalsSuite%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Download%20and%20extract%20SysInternals%20Suite%20and%20add%20to%20system%20path%5Cn%20%20%20%20Write-Host%20Checking%20if%20SysInternals%20Suite%20is%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20if%20(!(Test-Path%20%5C'C%3A%5C%5CProgram%20Files%20(x86)%5C%5CSysInterals%20Suite%5C'))%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20SysInternalsSuite%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Fdownload.sysinternals.com%2Ffiles%2FSysinternalsSuite.zip%20-Outfile%20%24ENV%3ATEMP%5C%5CSysInternalsSuite.zip%5Cn%20%20%20%20%20%20%20%20Expand-Archive%20-LiteralPath%20%24ENV%3ATEMP%5C%5CSysInternalsSuite.zip%20-DestinationPath%20%5C'C%3A%5C%5CProgram%20Files%20(x86)%5C%5CSysInterals%20Suite%5C'%5Cn%20%20%20%20%20%20%20%20%24OldPath%20%3D%20(Get-ItemProperty%20-Path%20%5C'Registry%3A%3AHKEY_LOCAL_MACHINE%5C%5CSystem%5C%5CCurrentControlSet%5C%5CControl%5C%5CSession%20Manager%5C%5CEnvironment%5C'%20-Name%20PATH).Path%5Cn%20%20%20%20%20%20%20%20%24NewPath%20%3D%20%24OldPath%20%2B%20%5C'%3BC%3A%5C%5CProgram%20Files%20(x86)%5C%5CSysInterals%20Suite%5C%5C%5C'%5Cn%20%20%20%20%20%20%20%20Set-ItemProperty%20-Path%20%5C'Registry%3A%3AHKEY_LOCAL_MACHINE%5C%5CSystem%5C%5CCurrentControlSet%5C%5CControl%5C%5CSession%20Manager%5C%5CEnvironment%5C'%20-Name%20PATH%20-Value%20%24NewPath%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24IntuneWinAppUtil%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Download%20IntuneWinAppUtil%20to%20c%3A%5C%5Cwindows%5C%5Csystem32%5Cn%20%20%20%20Write-Host%20Checking%20if%20IntuneWinAppUtil%20Suite%20is%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20if%20(!(Test-Path%20%5C'c%3A%5C%5Cwindows%5C%5Csystem32%5C%5CIntuneWinAppUtil.exe%5C'))%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20IntuneWinAppUtil%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Fgithub.com%2Fmicrosoft%2FMicrosoft-Win32-Content-Prep-Tool%2Fraw%2Fmaster%2FIntuneWinAppUtil.exe%20-Outfile%20c%3A%5C%5Cwindows%5C%5Csystem32%5C%5Cintunewinapputil.exe%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24Features%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Install%20Features%5Cn%20%20%20%20Write-Host%20Installing%20Features%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20Foreach%20(%24Feature%20in%20%24json.Features)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24Feature%20is%20already%20installed...%5Cn%20%20%20%20%20%20%20%20if%20((Get-WindowsOptionalFeature%20-Online%20-FeatureName%3A%24Feature).State%20-ne%20%5C'Enabled%5C')%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Feature%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Enable-WindowsOptionalFeature%20-Online%20-FeatureName%3A%24Feature%20-NoRestart%3A%24True%20-ErrorAction%20SilentlyContinue%20%7C%20Out-Null%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24PowerShellModules%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Install%20PowerShell%20Modules%5Cn%20%20%20%20Write-Host%20Installing%20Modules%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20%5BNet.ServicePointManager%5D%3A%3ASecurityProtocol%20%3D%20%5BNet.SecurityProtocolType%5D%3A%3ATls12%5Cn%5Cn%20%20%20%20Set-PSRepository%20PSGallery%20-InstallationPolicy%20Trusted%5Cn%5Cn%20%20%20%20Foreach%20(%24Module%20in%20%24json.PowerShellModules)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20the%20%24Module%20is%20already%20installed...%5Cn%20%20%20%20%20%20%20%20if%20(!(Get-Module%20%24Module%20-ListAvailable))%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Module%20PowerShell%20Module%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Install-Module%20-Name%20%24Module%20-Scope%20AllUsers%20-Force%3A%24True%20-AllowClobber%3A%24True%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24RSATTools%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Install%20selected%20RSAT%20Tools%5Cn%20%20%20%20Write-Host%20Installing%20RSAT%20components%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20Foreach%20(%24Tool%20in%20%24json.RSATTools)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24Tool.Split(%5C'~%5C')%5B0%5D%20is%20already%20installed...%5Cn%20%20%20%20%20%20%20%20if%20((Get-WindowsCapability%20-Online%20-Name%3A%24Tool).State%20-ne%20%5C'Installed%5C')%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Tool.Split(%5C'~%5C')%5B0%5D%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20DISM.exe%20%2FOnline%20%2Fadd-capability%20%2FCapabilityName%3A%24Tool%20%2FNoRestart%20%2FQuiet%20%7C%20Out-Null%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24PowerShellProfile%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Add%20settings%20to%20PowerShell%20Profile%20(Creating%20Profile%20if%20not%20exist)%5Cn%20%20%20%20Write-Host%20Adding%20settings%20to%20PowerShell%20Profile%20but%20skipping%20setting%20if%20already%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20Foreach%20(%24Setting%20in%20%24json.PowerShellProfile)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24Setting%20is%20already%20added...%5Cn%20%20%20%20%20%20%20%20if%20(!(Test-Path%20%24profile))%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20New-Item%20-Path%20%24profile%20-ItemType%3AFile%20-Force%3A%24True%20%7C%20out-null%20%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20if%20(!(Get-Content%20%24profile%20%7C%20Select-String%20-Pattern%20%24Setting%20-SimpleMatch))%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Setting%20was%20not%20found%20and%20adding%20now%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Add-Content%20%24profile%20%5C%22%60n%24(%24Setting)%5C%22%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24PowerShellModulesUpdate%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Update%20PowerShell%20Modules%20if%20needed%5Cn%20%20%20%20Write-Host%20Checking%20for%20older%20versions%20of%20PowerShell%20Modules%20and%20removing%20those%20if%20present%20-ForegroundColor%20Green%5Cn%20%20%20%20Set-PSRepository%20PSGallery%20-InstallationPolicy%20Trusted%5Cn%5Cn%20%20%20%20Foreach%20(%24Module%20in%20Get-InstalledModule%20%7C%20Select-Object%20Name)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Checking%20for%20older%20versions%20of%20the%20%24Module.Name%20PowerShell%20Module%5Cn%20%20%20%20%20%20%20%20%24AllVersions%20%3D%20Get-InstalledModule%20-Name%20%24Module.Name%20-AllVersions%20-ErrorAction%3ASilentlyContinue%5Cn%20%20%20%20%20%20%20%20%24AllVersions%20%3D%20%24AllVersions%20%7C%20Sort-Object%20PublishedDate%20-Descending%20%5Cn%20%20%20%20%20%20%20%20%24MostRecentVersion%20%3D%20%24AllVersions%5B0%5D.Version%5Cn%20%20%20%20%20%20%20%20if%20(%24AllVersions.Count%20-gt%201%20)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20Foreach%20(%24Version%20in%20%24AllVersions)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(%24Version.Version%20-ne%20%24MostRecentVersion)%20%7B%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%5C%22Uninstalling%20previous%20version%5C%22%20%24Version.Version%20%5C%22of%20Module%5C%22%20%24Module.Name%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Uninstall-Module%20-Name%20%24Module.Name%20-RequiredVersion%20%24Version.Version%20-Force%3A%24True%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%20%20%20%20%7D%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cnif%20(%24PowerShellCommands%20-or%20%24All)%20%7B%5Cn%20%20%20%20%23Run%20PowerShell%20commandline%20options%5Cn%20%20%20%20Write-Host%20Running%20Commandline%20options%20and%20this%20could%20take%20a%20while%20-ForegroundColor%20Green%5Cn%20%20%20%20Foreach%20(%24Command%20in%20%24json.PowerShellCommands)%20%7B%5Cn%20%20%20%20%20%20%20%20Write-Host%20Running%20%24Command%20-ForegroundColor%20Yellow%5Cn%20%20%20%20%20%20%20%20Powershell.exe%20-Executionpolicy%20Bypass%20-Command%20%24Command%5Cn%20%20%20%20%7D%5Cn%7D%5Cn%5Cn%23Stop%20Transcript%20logging%5CnStop-Transcript%26lt%3B%5C%2Fcode%26gt%3B%26lt%3B%5C%2Fpre%26gt%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EInstall_Apps.json%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3CPRE%20class%3D%22%5C%26quot%3Blia-code-sample%22%20language-json%3D%22%22%3E%3CCODE%3E%7B%5Cn%20%20%20%5C%22Apps%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22Microsoft.SQLServerManagementStudio%5C%22%2C%5Cn%20%20%20%20%20%20%5C%227zip.7zip%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Adobe.Acrobat.Reader.64-bit%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22BraveSoftware.BraveBrowser%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Canonical.Ubuntu%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Cisco.CiscoWebexMeetings%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Citrix.Workspace%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Famatech.AdvancedIPScanner%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Fortinet.FortiClientVPN%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Git.Git%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22GitHub.GitHubDesktop%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Google.Chrome%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Graphviz.Graphviz%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Insecure.Nmap%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22JAMSoftware.TreeSize.Free%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.AzureCLI%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.AzureStorageExplorer%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.DeploymentToolkit%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.dotnetRuntime.3-x64%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.dotnetRuntime.3-x86%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.dotnetRuntime.5-x64%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.dotnetRuntime.5-x86%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.EdgeWebView2Runtime%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.PowerBI%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.Powershell%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.PowerToys%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.RemoteDesktopClient%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VisualStudioCode%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.WindowsAdminCenter%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.WindowsADK%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.WindowsTerminal%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.XMLNotepad%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Mozilla.FireFox%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Notepad%2B%2B.Notepad%2B%2B%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Obsidian.Obsidian%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Ookla.Speedtest%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22OpenVPNTechnologies.OpenVPNConnect%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Oracle.JavaRuntimeEnvironment%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PuTTY.PuTTY%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Python.Python.3%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rufus.Rufus%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Teamviewer.Teamviewer%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Telerik.Fiddler%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22VideoLAN.VLC%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22WinSCP.WinSCP%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22WiresharkFoundation.Wireshark%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Zoom.Zoom%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22Features%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22Containers-DisposableClientVM%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft-Windows-Subsystem-Linux%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22TelnetClient%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22TFTP%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22FilesToClean%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22*.lnk%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22desktop.ini%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22MicrosftVCRuntime%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2008Redist-x86%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2008Redist-x64%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2010Redist-x64%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2010Redist-x86%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2012Redist-x64%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2012Redist-x86%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2013Redist-x64%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.VC%2B%2B2013Redist-x86%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22ProcessesToKill%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22advanced_ip_scanner%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22OpenVPNConnect%5C%22%2C%5Cn%5Ct%20%20%5C%22PowerToys.Settings%5C%22%2C%5Cn%5Ct%20%20%5C%22PtSrv%5C%22%2C%5Cn%5Ct%20%20%5C%22PtSrv%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22PowerShellCommands%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22Update-Help%20-Confirm%3A%24False%20-Force%3A%24True%20-ErrorAction%3ASilentlyContinue%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22PowerShellModules%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22AIPService%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22AzureAD%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22AzureRM%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22AZViz%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22AzureADPreview%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22ExchangeOnlineManagement%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22IntuneBackupAndRestore%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22IntuneDocumentation%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22IntuneWin32App%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.Graph.Intune%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22M365Documentation%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22MSGraphFunctions%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.Online.SharePoint.PowerShell%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.PowerApps.Administration.Powershell%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.PowerShell.Crescendo%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.PowerShell.SecretManagement%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Microsoft.PowerShell.SecretStore%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22MicrosoftTeams%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22MSAL.PS%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22MSCommerce%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22MSOnline%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Oh-My-Posh%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22ORCA%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PNP.PowerShell%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22ps2exe%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PnP.PowerShell%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PSword%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PSWriteWord%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Posh-Git%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Powershell-yaml%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PSReadLine%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PSParseHTML%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22PSWindowsUpdate%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22SQLServer%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22VMware.PowerCLI%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22PowerShellProfile%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22Import-Module%20Oh-My-Posh%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Import-Module%20Posh-Git%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Set-PSReadlineKeyHandler%20-Key%20Tab%20-Function%20Complete%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Set-PSReadLineOption%20-PredictionSource%20History%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22%5BNet.ServicePointManager%5D%3A%3ASecurityProtocol%20%3D%20%5BNet.SecurityProtocolType%5D%3A%3ATls12%5C%22%5Cn%20%20%20%5D%2C%5Cn%20%20%20%5C%22RSATTools%5C%22%3A%20%5B%5Cn%20%20%20%20%20%20%5C%22Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.BitLocker.Recovery.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.CertificateServices.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.DHCP.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.Dns.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.FailoverCluster.Management.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.FileServices.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.IPAM.Client.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.LLDP.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.NetworkController.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.NetworkLoadBalancing.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.RemoteAccess.Management.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.RemoteDesktop.Services.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.ServerManager.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.Shielded.VM.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.StorageMigrationService.Management.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.StorageReplica.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.SystemInsights.Management.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.VolumeActivation.Tools~~~~0.0.1.0%5C%22%2C%5Cn%20%20%20%20%20%20%5C%22Rsat.WSUS.Tools~~~~0.0.1.0%5C%22%5Cn%20%20%20%5D%5Cn%7D%26lt%3B%5C%2Fcode%26gt%3B%26lt%3B%5C%2Fpre%26gt%3B%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%26lt%3B%5C%2FP%26gt%3B%26lt%3B%5C%2Flingo-body%26gt%3B%3CLINGO-LABS%20id%3D%22%5C%26quot%3Blingo-labs-3139719%5C%26quot%3B%22%20slang%3D%22%5C%26quot%3Ben-US%5C%26quot%3B%22%3E%3CLINGO-LABEL%3EWindows%20PowerShell%26lt%3B%5C%2Flingo-label%26gt%3B%26lt%3B%5C%2Flingo-labs%26gt%3B%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3C%2FLINGO-SUB%3E%3CLINGO-SUB%20id%3D%22lingo-sub-3139719%22%20slang%3D%22en-US%22%3EHowto%3A%20Install%20your%20apps%2C%20modules%20and%20settings%20the%20easy%20way%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-3139719%22%20slang%3D%22en-US%22%3E%3CP%3EWhenever%20I%20reinstall%20my%20Windows%20laptop%2C%20I%20have%20a%20lot%20of%20apps%2C%20modules%2C%20RSAT%20Tools%2C%20Sysinternals%20tools%26nbsp%3B%20and%20settings%20that%20need%20to%20be%20reconfigured.%20So..%20Let's%20automate%20that%20%3A)%3C%2Fimg%3E%20Below%20is%20my%20install%20script%20which%20you%20can%20use%20to%20install%20everything%2C%20or%20just%20the%20programs%20or%20perhaps%20just%20the%20PowerShell%20modules.%20Options%20are%20there%20to%20do%20so%20and%20you%20can%20add%2Fremove%20things%20in%20the%20JSON%20file%20easily%20and%20let%20it%20run%20again.%20Just%20put%20the%20three%20files%20in%20one%20location%2C%20run%20install.cmd%20as%20Administrator%20and%20lean%20back...%3CBR%20%2F%3E%3CBR%20%2F%3EShortcuts%20for%20newly%20installed%20software%20will%20be%20removed%20from%20your%20desktop%2C%20hate%20those%20%3B)%3C%2Fimg%3E%20%2C%20and%20programs%20that%20start%20automatically%20after%20installing%20will%20be%20closed.%20Be%20aware%20of%20the%20fact%20that%20your%20machine%20might%20restart%20during%20installation%2C%20save%20your%20work%20and%20you%20can%20re-run%20the%20script%20to%20continue%20installing%20the%20rest%20(It%20will%20check%20and%20skip%20things%20that%20are%20already%20installed)%3CBR%20%2F%3E%3CBR%20%2F%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EInstall.cmd%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-bash%22%3E%3CCODE%3E%40echo%20off%0ATITLE%20Installing%20Apps%2C%20Features%20and%20PowerShell%20Modules...%0Aecho%20Your%20computer%20might%20restart%2C%20please%20save%20your%20work%20before%20continuing!%0Aecho%20After%20restart%2C%20you%20can%20restart%20this%20script%20to%20finish%20installation%0Apause%0Apowershell%20-executionpolicy%20bypass%20-noprofile%20-file%20%22%25~dp0install_apps.ps1%22%20-All%0Aecho%20Logging%20is%20available%20in%20%25Temp%25%5CInstall.log%0Aecho%20Press%20any%20to%20update%20installed%20apps%20or%20CTRL-C%20to%20exit%20and%20then%20reboot%20your%20system%20manually%0Apause%0Awinget%20upgrade%20--all%20--silent%20--force%0Aecho.%20%0Aecho%20Done%20updating%2C%20press%20any%20key%20to%20quit%20and%20reboot%20your%20system%20manually%0Apause%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EInstall_Apps.ps1%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-powershell%22%3E%3CCODE%3E%26lt%3B%23%0A.SYNOPSIS%0A%0AInstalls%20Programs%2C%20Modules%2C%20Features%20and%20settings%20using%20Winget%20and%20PowerShell%0A%0A.DESCRIPTION%0A%0AInstalls%2FConfigures%20all%20options%20from%20the%20.json%20file%0A%0A.PARAMETER%20All%0AInstall%20all%20Programs%2C%20Modules%2C%20Features%20and%20Settings%0A%0A.PARAMETER%20Apps%0AInstall%20all%20Software%0A%0A.PARAMETER%20Features%0AInstall%20all%20Windows%20Features%0A%0A.PARAMETER%20MicrosftVCRuntime%0AInstall%20all%20Microsoft%20VC%2B%2B%20Runtimes%0A%0A.PARAMETER%20PowerShellCommands%0AExecute%20all%20PowerShell%20commands%20like%20Update-Help%0A%0A.PARAMETER%20PowerShellModules%0AInstall%20all%20PowerShell%20Modules%0A%0A.PARAMETER%20PowerShellModulesUpdate%0AUpdate%20all%20installed%20PowerShell%20Modules%20to%20the%20latest%20version%0A%0A.PARAMETER%20PowerShellProfile%0AUpdate%20the%20PowerShell%20Profile%0A%0A.PARAMETER%20RSATTools%0AInstall%20the%20Windows%20Remote%20System%20Administration%20Tools%0A%0A.PARAMETER%20%24SCCMTools%0AInstall%20the%20System%20Center%20Configuration%20Manager%20tools%20like%20CMTrace%0A%0A.PARAMETER%20SysInternalsSuite%0AInstall%20the%20Windows%20Remote%20System%20Administration%20Tools%0A%0A.PARAMETER%20IntuneWinAppUtil%0AInstall%20the%20IntuneWinAppUtil%20in%20c%3A%5Cwindows%5Csystem32%0A%0A.INPUTS%0A%0ADefaults%20to%20-All%20if%20no%20other%20Parameters%20are%20specified%0A%0A.OUTPUTS%0A%0AScreen%20output%20and%20TransAction%20log%20which%20is%20available%20in%20%25Temp%25%5CInstall.log%0A%0A.EXAMPLE%0A%0APS%26gt%3B%20Install_Apps.ps1%20-Apps%0AInstalls%20all%20Applications%0A%0A.EXAMPLE%0A%0APS%26gt%3B%20Install_Apps.ps1%20-SCCMTools%20-PowerShellModule%0AInstalls%20the%20System%20Center%20Configuration%20Manager%20Tools%20and%20installs%20all%20PowerShell%20Modules%0A%0A.LINK%0A%0ANone%0A%0A%23%26gt%3B%0A%0A%23Parameters%0A%5BCmdletBinding(DefaultParameterSetName%20%3D%20%22All%22)%5D%0Aparam%20(%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24False%2C%20HelpMessage%20%3D%20%22Install%20all%20Software%2C%20Modules%2C%20Features%20and%20Settings%22%2C%20ParameterSetName%20%3D%20%22All%22)%5D%5BSwitch%5D%24All%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20all%20Software%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24Apps%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20all%20Windows%20Features%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24Features%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20all%20Microsoft%20VC%2B%2B%20Runtimes%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24MicrosftVCRuntime%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Execute%20all%20PowerShell%20commands%20like%20Update-Help%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24PowerShellCommands%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20all%20PowerShell%20Modules%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24PowerShellModules%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Update%20all%20installed%20PowerShell%20Modules%20to%20the%20latest%20version%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24PowerShellModulesUpdate%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Update%20the%20PowerShell%20Profile%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24PowerShellProfile%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20the%20Windows%20Remote%20System%20Administration%20Tools%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24RSATTools%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20the%20System%20Center%20Configuration%20Manager%20tools%20like%20CMTrace%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24SCCMTools%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20all%20SysInternals%20Suite%20tools%20and%20add%20them%20to%20the%20system%20path%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24SysInternalsSuite%2C%0A%20%20%20%20%5BParameter(Mandatory%20%3D%20%24false%2C%20HelpMessage%20%3D%20%22Install%20the%20IntuneWinAppUtil%20to%20c%3A%5Cwindows%5Csystem32%22%2C%20ParameterSetName%20%3D%20%22Optional%22)%5D%5BSwitch%5D%24IntuneWinAppUtil%0A)%0Aif%20(%24PSCmdlet.ParameterSetName%20-eq%20'All')%20%7B%0A%20%20%20%20Write-Host%20No%20parameter%20was%20specified%20and%20using%20all%20options%20-ForegroundColor%20Green%0A%20%20%20%20%24All%20%3D%20%24True%0A%7D%0A%0A%23Requires%20-RunAsAdministrator%0A%23Start%20Transcript%20logging%20in%20Temp%20folder%0AStart-Transcript%20%24ENV%3ATEMP%5Cinstall.log%0A%0A%23Set-Executionpolicy%20and%20no%20prompting%0ASet-ExecutionPolicy%20Bypass%20-Force%3A%24True%20-Confirm%3A%24false%20-ErrorAction%20SilentlyContinue%0ASet-Variable%20-Name%20'ConfirmPreference'%20-Value%20'None'%20-Scope%20Global%0A%0A%23Change%20invoke-webrequest%20progress%20bar%20to%20hidden%20for%20faster%20downloads%0A%24ProgressPreference%20%3D%20'SilentlyContinue'%0A%0A%23Import%20list%20of%20apps%2C%20features%20and%20modules%20that%20can%20be%20installed%20using%20json%20file%0A%24json%20%3D%20Get-Content%20%22%24(%24PSScriptRoot)%5CInstall_apps.json%22%20%7C%20ConvertFrom-Json%0A%0A%23Check%20if%20Winget%20is%20installed%2C%20if%20not%20install%20it%20by%20installing%20VCLibs%20(Prerequisite)%20followed%20by%20Winget%20itself%0Aif%20(%24Apps%20-or%20%24MicrosftVCRuntime%20-or%20%24All)%20%7B%0A%20%20%20%20if%20(!(Get-AppxPackage%20-Name%20Microsoft.Winget.Source))%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Winget%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Faka.ms%2FMicrosoft.VCLibs.x64.14.00.Desktop.appx%20-Outfile%20%24ENV%3ATEMP%5CMicrosoft.VCLibs.x64.14.00.Desktop.appx%0A%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Faka.ms%2Fgetwinget%20-Outfile%20%24ENV%3ATEMP%5Cwinget.msixbundle%20%20%20%20%0A%20%20%20%20%20%20%20%20Add-AppxPackage%20%24ENV%3ATEMP%5CMicrosoft.VCLibs.x64.14.00.Desktop.appx%20-ErrorAction%20SilentlyContinue%0A%20%20%20%20%20%20%20%20Add-AppxPackage%20-Path%20%24ENV%3ATEMP%5Cwinget.msixbundle%20-ErrorAction%20SilentlyContinue%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24MicrosftVCRuntime%20-or%20%24All)%20%7B%0A%20%20%20%20%23Install%20Microsoft%20Visual%20C%2B%2B%20Runtimes%20using%20WinGet%0A%20%20%20%20Write-Host%20Installing%20Microsoft%20Visual%20C%2B%2B%20Runtime%20versions%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%0A%20%20%20%20%24CurrentVC%20%3D%20Get-WmiObject%20-Class%20Win32_Product%20-Filter%20%22Name%20LIKE%20'%25Visual%20C%2B%2B%25'%22%20-ErrorAction%20SilentlyContinue%20%7C%20Select-Object%20Name%0A%20%20%20%20Foreach%20(%24App%20in%20%24json.MicrosftVCRuntime)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24App%20is%20already%20installed...%0A%20%20%20%20%20%20%20%20if%20(!(%24CurrentVC%20%7C%20Select-String%20%24App.split('%2B')%5B2%5D.SubString(0%2C%204)%20%7C%20Select-String%20%24App.split('-')%5B1%5D))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24App%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20winget.exe%20install%20%24App%20--silent%20--force%20--source%20winget%20--accept-package-agreements%20--accept-source-agreements%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24Apps%20-or%20%24All)%20%7B%0A%20%20%20%20%23Install%20applications%20using%20WinGet%0A%20%20%20%20Write-Host%20Installing%20Applications%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%0A%20%20%20%20Foreach%20(%24App%20in%20%24json.Apps)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24App%20is%20already%20installed...%0A%20%20%20%20%20%20%20%20winget.exe%20list%20--id%20%24App%20--accept-source-agreements%20%7C%20Out-Null%0A%20%20%20%20%20%20%20%20if%20(%24LASTEXITCODE%20-eq%20'-1978335212')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24App.Split('.')%5B1%5D%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20winget.exe%20install%20%24App%20--silent%20--force%20--source%20winget%20--accept-package-agreements%20--accept-source-agreements%0A%20%20%20%20%20%20%20%20%20%20%20%20Foreach%20(%24Application%20in%20%24json.ProcessesToKill)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20get-process%20%24Application%20-ErrorAction%20SilentlyContinue%20%7C%20Stop-Process%20-Force%3A%24True%20-Confirm%3A%24false%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20%0A%20%20%20%20%7D%0A%20%20%20%20%23Clean-up%20downloaded%20Winget%20Packages%0A%20%20%20%20Remove-Item%20%24ENV%3ATEMP%5CWinget%20-Recurse%20-Force%3A%24True%20-ErrorAction%3ASilentlyContinue%0A%0A%20%20%20%20%23Cleanup%20shortcuts%20from%20installed%20applications%0A%20%20%20%20Foreach%20(%24File%20in%20%24json.filestoclean)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Cleaning%20%24File%20from%20personal%20ad%20public%20Windows%20Desktop%20-ForegroundColor%20Green%0A%20%20%20%20%20%20%20%20%24UserDesktop%20%3D%20(%5BEnvironment%5D%3A%3AGetFolderPath(%22Desktop%22))%0A%20%20%20%20%20%20%20%20Get-ChildItem%20C%3A%5Cusers%5Cpublic%5CDesktop%5C%24File%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%0A%20%20%20%20%20%20%20%20Get-ChildItem%20%24UserDesktop%5C%24File%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%0A%20%20%20%20%20%20%20%20Get-ChildItem%20C%3A%5Cusers%5Cpublic%5CDesktop%5C%24File%20-Hidden%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%0A%20%20%20%20%20%20%20%20Get-ChildItem%20%24UserDesktop%5C%24File%20-Hidden%20-ErrorAction%20SilentlyContinue%20%7C%20Where-Object%20LastWriteDate%20-LE%20((Get-Date).AddHours(%20-%201))%20%7C%20Remove-Item%20-Force%3A%24True%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24SCCMTools%20-or%20%24All)%20%7B%0A%20%20%20%20%23Download%20and%20install%20System%20Center%202012%20R2%20Configuration%20Manager%20Toolkit%20for%20CMTRACE%20tool%0A%20%20%20%20Write-Host%20Checking%20if%20System%20Center%202012%20R2%20Configuration%20Manager%20Toolkit%20is%20already%20installed%20-ForegroundColor%20Green%0A%20%20%20%20if%20(!(Test-Path%20'C%3A%5CProgram%20Files%20(x86)%5CConfigMgr%202012%20Toolkit%20R2'))%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20SCCM%202012%20R2%20Toolkit%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Fdownload.microsoft.com%2Fdownload%2F5%2F0%2F8%2F508918E1-3627-4383-B7D8-AA07B3490D21%2FConfigMgrTools.msi%20-UseBasicParsing%20-Outfile%20%24ENV%3ATEMP%5CConfigMgrTools.msi%0A%20%20%20%20%20%20%20%20msiexec.exe%20%2Fi%20%24ENV%3ATEMP%5CConfigMgrTools.msi%20%2Fqn%20%20%20%20%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24SysInternalsSuite%20-or%20%24All)%20%7B%0A%20%20%20%20%23Download%20and%20extract%20SysInternals%20Suite%20and%20add%20to%20system%20path%0A%20%20%20%20Write-Host%20Checking%20if%20SysInternals%20Suite%20is%20present%20-ForegroundColor%20Green%0A%20%20%20%20if%20(!(Test-Path%20'C%3A%5CProgram%20Files%20(x86)%5CSysInterals%20Suite'))%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20SysInternalsSuite%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Fdownload.sysinternals.com%2Ffiles%2FSysinternalsSuite.zip%20-Outfile%20%24ENV%3ATEMP%5CSysInternalsSuite.zip%0A%20%20%20%20%20%20%20%20Expand-Archive%20-LiteralPath%20%24ENV%3ATEMP%5CSysInternalsSuite.zip%20-DestinationPath%20'C%3A%5CProgram%20Files%20(x86)%5CSysInterals%20Suite'%0A%20%20%20%20%20%20%20%20%24OldPath%20%3D%20(Get-ItemProperty%20-Path%20'Registry%3A%3AHKEY_LOCAL_MACHINE%5CSystem%5CCurrentControlSet%5CControl%5CSession%20Manager%5CEnvironment'%20-Name%20PATH).Path%0A%20%20%20%20%20%20%20%20%24NewPath%20%3D%20%24OldPath%20%2B%20'%3BC%3A%5CProgram%20Files%20(x86)%5CSysInterals%20Suite%5C'%0A%20%20%20%20%20%20%20%20Set-ItemProperty%20-Path%20'Registry%3A%3AHKEY_LOCAL_MACHINE%5CSystem%5CCurrentControlSet%5CControl%5CSession%20Manager%5CEnvironment'%20-Name%20PATH%20-Value%20%24NewPath%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24IntuneWinAppUtil%20-or%20%24All)%20%7B%0A%20%20%20%20%23Download%20IntuneWinAppUtil%20to%20c%3A%5Cwindows%5Csystem32%0A%20%20%20%20Write-Host%20Checking%20if%20IntuneWinAppUtil%20Suite%20is%20present%20-ForegroundColor%20Green%0A%20%20%20%20if%20(!(Test-Path%20'c%3A%5Cwindows%5Csystem32%5CIntuneWinAppUtil.exe'))%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20IntuneWinAppUtil%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20Invoke-Webrequest%20-uri%20https%3A%2F%2Fgithub.com%2Fmicrosoft%2FMicrosoft-Win32-Content-Prep-Tool%2Fraw%2Fmaster%2FIntuneWinAppUtil.exe%20-Outfile%20c%3A%5Cwindows%5Csystem32%5Cintunewinapputil.exe%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24Features%20-or%20%24All)%20%7B%0A%20%20%20%20%23Install%20Features%0A%20%20%20%20Write-Host%20Installing%20Features%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%0A%20%20%20%20Foreach%20(%24Feature%20in%20%24json.Features)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24Feature%20is%20already%20installed...%0A%20%20%20%20%20%20%20%20if%20((Get-WindowsOptionalFeature%20-Online%20-FeatureName%3A%24Feature).State%20-ne%20'Enabled')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Feature%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20Enable-WindowsOptionalFeature%20-Online%20-FeatureName%3A%24Feature%20-NoRestart%3A%24True%20-ErrorAction%20SilentlyContinue%20%7C%20Out-Null%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24PowerShellModules%20-or%20%24All)%20%7B%0A%20%20%20%20%23Install%20PowerShell%20Modules%0A%20%20%20%20Write-Host%20Installing%20Modules%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%0A%20%20%20%20%5BNet.ServicePointManager%5D%3A%3ASecurityProtocol%20%3D%20%5BNet.SecurityProtocolType%5D%3A%3ATls12%0A%0A%20%20%20%20Set-PSRepository%20PSGallery%20-InstallationPolicy%20Trusted%0A%0A%20%20%20%20Foreach%20(%24Module%20in%20%24json.PowerShellModules)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20the%20%24Module%20is%20already%20installed...%0A%20%20%20%20%20%20%20%20if%20(!(Get-Module%20%24Module%20-ListAvailable))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Module%20PowerShell%20Module%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20Install-Module%20-Name%20%24Module%20-Scope%20AllUsers%20-Force%3A%24True%20-AllowClobber%3A%24True%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24RSATTools%20-or%20%24All)%20%7B%0A%20%20%20%20%23Install%20selected%20RSAT%20Tools%0A%20%20%20%20Write-Host%20Installing%20RSAT%20components%20but%20skipping%20install%20if%20already%20present%20-ForegroundColor%20Green%0A%20%20%20%20Foreach%20(%24Tool%20in%20%24json.RSATTools)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24Tool.Split('~')%5B0%5D%20is%20already%20installed...%0A%20%20%20%20%20%20%20%20if%20((Get-WindowsCapability%20-Online%20-Name%3A%24Tool).State%20-ne%20'Installed')%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Tool.Split('~')%5B0%5D%20was%20not%20found%20and%20installing%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20DISM.exe%20%2FOnline%20%2Fadd-capability%20%2FCapabilityName%3A%24Tool%20%2FNoRestart%20%2FQuiet%20%7C%20Out-Null%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24PowerShellProfile%20-or%20%24All)%20%7B%0A%20%20%20%20%23Add%20settings%20to%20PowerShell%20Profile%20(Creating%20Profile%20if%20not%20exist)%0A%20%20%20%20Write-Host%20Adding%20settings%20to%20PowerShell%20Profile%20but%20skipping%20setting%20if%20already%20present%20-ForegroundColor%20Green%0A%20%20%20%20Foreach%20(%24Setting%20in%20%24json.PowerShellProfile)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20if%20%24Setting%20is%20already%20added...%0A%20%20%20%20%20%20%20%20if%20(!(Test-Path%20%24profile))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20New-Item%20-Path%20%24profile%20-ItemType%3AFile%20-Force%3A%24True%20%7C%20out-null%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20(!(Get-Content%20%24profile%20%7C%20Select-String%20-Pattern%20%24Setting%20-SimpleMatch))%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%24Setting%20was%20not%20found%20and%20adding%20now%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20Add-Content%20%24profile%20%22%60n%24(%24Setting)%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24PowerShellModulesUpdate%20-or%20%24All)%20%7B%0A%20%20%20%20%23Update%20PowerShell%20Modules%20if%20needed%0A%20%20%20%20Write-Host%20Checking%20for%20older%20versions%20of%20PowerShell%20Modules%20and%20removing%20those%20if%20present%20-ForegroundColor%20Green%0A%20%20%20%20Set-PSRepository%20PSGallery%20-InstallationPolicy%20Trusted%0A%0A%20%20%20%20Foreach%20(%24Module%20in%20Get-InstalledModule%20%7C%20Select-Object%20Name)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Checking%20for%20older%20versions%20of%20the%20%24Module.Name%20PowerShell%20Module%0A%20%20%20%20%20%20%20%20%24AllVersions%20%3D%20Get-InstalledModule%20-Name%20%24Module.Name%20-AllVersions%20-ErrorAction%3ASilentlyContinue%0A%20%20%20%20%20%20%20%20%24AllVersions%20%3D%20%24AllVersions%20%7C%20Sort-Object%20PublishedDate%20-Descending%20%0A%20%20%20%20%20%20%20%20%24MostRecentVersion%20%3D%20%24AllVersions%5B0%5D.Version%0A%20%20%20%20%20%20%20%20if%20(%24AllVersions.Count%20-gt%201%20)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Foreach%20(%24Version%20in%20%24AllVersions)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(%24Version.Version%20-ne%20%24MostRecentVersion)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Write-Host%20%22Uninstalling%20previous%20version%22%20%24Version.Version%20%22of%20Module%22%20%24Module.Name%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Uninstall-Module%20-Name%20%24Module.Name%20-RequiredVersion%20%24Version.Version%20-Force%3A%24True%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%7D%0A%0Aif%20(%24PowerShellCommands%20-or%20%24All)%20%7B%0A%20%20%20%20%23Run%20PowerShell%20commandline%20options%0A%20%20%20%20Write-Host%20Running%20Commandline%20options%20and%20this%20could%20take%20a%20while%20-ForegroundColor%20Green%0A%20%20%20%20Foreach%20(%24Command%20in%20%24json.PowerShellCommands)%20%7B%0A%20%20%20%20%20%20%20%20Write-Host%20Running%20%24Command%20-ForegroundColor%20Yellow%0A%20%20%20%20%20%20%20%20Powershell.exe%20-Executionpolicy%20Bypass%20-Command%20%24Command%0A%20%20%20%20%7D%0A%7D%0A%0A%23Stop%20Transcript%20logging%0AStop-Transcript%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%3CBR%20%2F%3EInstall_Apps.json%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-json%22%3E%3CCODE%3E%7B%0A%20%20%20%22Apps%22%3A%20%5B%0A%20%20%20%20%20%20%22Microsoft.SQLServerManagementStudio%22%2C%0A%20%20%20%20%20%20%227zip.7zip%22%2C%0A%20%20%20%20%20%20%22Adobe.Acrobat.Reader.64-bit%22%2C%0A%20%20%20%20%20%20%22BraveSoftware.BraveBrowser%22%2C%0A%20%20%20%20%20%20%22Canonical.Ubuntu%22%2C%0A%20%20%20%20%20%20%22Cisco.CiscoWebexMeetings%22%2C%0A%20%20%20%20%20%20%22Citrix.Workspace%22%2C%0A%20%20%20%20%20%20%22Famatech.AdvancedIPScanner%22%2C%0A%20%20%20%20%20%20%22Fortinet.FortiClientVPN%22%2C%0A%20%20%20%20%20%20%22Git.Git%22%2C%0A%20%20%20%20%20%20%22GitHub.GitHubDesktop%22%2C%0A%20%20%20%20%20%20%22Google.Chrome%22%2C%0A%20%20%20%20%20%20%22Graphviz.Graphviz%22%2C%0A%20%20%20%20%20%20%22Insecure.Nmap%22%2C%0A%20%20%20%20%20%20%22JAMSoftware.TreeSize.Free%22%2C%0A%20%20%20%20%20%20%22Microsoft.AzureCLI%22%2C%0A%20%20%20%20%20%20%22Microsoft.AzureStorageExplorer%22%2C%0A%20%20%20%20%20%20%22Microsoft.DeploymentToolkit%22%2C%0A%20%20%20%20%20%20%22Microsoft.dotnetRuntime.3-x64%22%2C%0A%20%20%20%20%20%20%22Microsoft.dotnetRuntime.3-x86%22%2C%0A%20%20%20%20%20%20%22Microsoft.dotnetRuntime.5-x64%22%2C%0A%20%20%20%20%20%20%22Microsoft.dotnetRuntime.5-x86%22%2C%0A%20%20%20%20%20%20%22Microsoft.EdgeWebView2Runtime%22%2C%0A%20%20%20%20%20%20%22Microsoft.PowerBI%22%2C%0A%20%20%20%20%20%20%22Microsoft.Powershell%22%2C%0A%20%20%20%20%20%20%22Microsoft.PowerToys%22%2C%0A%20%20%20%20%20%20%22Microsoft.RemoteDesktopClient%22%2C%0A%20%20%20%20%20%20%22Microsoft.VisualStudioCode%22%2C%0A%20%20%20%20%20%20%22Microsoft.WindowsAdminCenter%22%2C%0A%20%20%20%20%20%20%22Microsoft.WindowsADK%22%2C%0A%20%20%20%20%20%20%22Microsoft.WindowsTerminal%22%2C%0A%20%20%20%20%20%20%22Microsoft.XMLNotepad%22%2C%0A%20%20%20%20%20%20%22Mozilla.FireFox%22%2C%0A%20%20%20%20%20%20%22Notepad%2B%2B.Notepad%2B%2B%22%2C%0A%20%20%20%20%20%20%22Obsidian.Obsidian%22%2C%0A%20%20%20%20%20%20%22Ookla.Speedtest%22%2C%0A%20%20%20%20%20%20%22OpenVPNTechnologies.OpenVPNConnect%22%2C%0A%20%20%20%20%20%20%22Oracle.JavaRuntimeEnvironment%22%2C%0A%20%20%20%20%20%20%22PuTTY.PuTTY%22%2C%0A%20%20%20%20%20%20%22Python.Python.3%22%2C%0A%20%20%20%20%20%20%22Rufus.Rufus%22%2C%0A%20%20%20%20%20%20%22Teamviewer.Teamviewer%22%2C%0A%20%20%20%20%20%20%22Telerik.Fiddler%22%2C%0A%20%20%20%20%20%20%22VideoLAN.VLC%22%2C%0A%20%20%20%20%20%20%22WinSCP.WinSCP%22%2C%0A%20%20%20%20%20%20%22WiresharkFoundation.Wireshark%22%2C%0A%20%20%20%20%20%20%22Zoom.Zoom%22%0A%20%20%20%5D%2C%0A%20%20%20%22Features%22%3A%20%5B%0A%20%20%20%20%20%20%22Containers-DisposableClientVM%22%2C%0A%20%20%20%20%20%20%22Microsoft-Windows-Subsystem-Linux%22%2C%0A%20%20%20%20%20%20%22TelnetClient%22%2C%0A%20%20%20%20%20%20%22TFTP%22%0A%20%20%20%5D%2C%0A%20%20%20%22FilesToClean%22%3A%20%5B%0A%20%20%20%20%20%20%22*.lnk%22%2C%0A%20%20%20%20%20%20%22desktop.ini%22%0A%20%20%20%5D%2C%0A%20%20%20%22MicrosftVCRuntime%22%3A%20%5B%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2008Redist-x86%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2008Redist-x64%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2010Redist-x64%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2010Redist-x86%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2012Redist-x64%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2012Redist-x86%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2013Redist-x64%22%2C%0A%20%20%20%20%20%20%22Microsoft.VC%2B%2B2013Redist-x86%22%0A%20%20%20%5D%2C%0A%20%20%20%22ProcessesToKill%22%3A%20%5B%0A%20%20%20%20%20%20%22advanced_ip_scanner%22%2C%0A%20%20%20%20%20%20%22OpenVPNConnect%22%2C%0A%20%20%20%22PowerToys.Settings%22%2C%0A%20%20%20%22PtSrv%22%2C%0A%20%20%20%22PtSrv%22%0A%20%20%20%5D%2C%0A%20%20%20%22PowerShellCommands%22%3A%20%5B%0A%20%20%20%20%20%20%22Update-Help%20-Confirm%3A%24False%20-Force%3A%24True%20-ErrorAction%3ASilentlyContinue%22%0A%20%20%20%5D%2C%0A%20%20%20%22PowerShellModules%22%3A%20%5B%0A%20%20%20%20%20%20%22AIPService%22%2C%0A%20%20%20%20%20%20%22AzureAD%22%2C%0A%20%20%20%20%20%20%22AzureRM%22%2C%0A%20%20%20%20%20%20%22AZViz%22%2C%0A%20%20%20%20%20%20%22AzureADPreview%22%2C%0A%20%20%20%20%20%20%22ExchangeOnlineManagement%22%2C%0A%20%20%20%20%20%20%22IntuneBackupAndRestore%22%2C%0A%20%20%20%20%20%20%22IntuneDocumentation%22%2C%0A%20%20%20%20%20%20%22IntuneWin32App%22%2C%0A%20%20%20%20%20%20%22Microsoft.Graph.Intune%22%2C%0A%20%20%20%20%20%20%22M365Documentation%22%2C%0A%20%20%20%20%20%20%22MSGraphFunctions%22%2C%0A%20%20%20%20%20%20%22Microsoft.Online.SharePoint.PowerShell%22%2C%0A%20%20%20%20%20%20%22Microsoft.PowerApps.Administration.Powershell%22%2C%0A%20%20%20%20%20%20%22Microsoft.PowerShell.Crescendo%22%2C%0A%20%20%20%20%20%20%22Microsoft.PowerShell.SecretManagement%22%2C%0A%20%20%20%20%20%20%22Microsoft.PowerShell.SecretStore%22%2C%0A%20%20%20%20%20%20%22MicrosoftTeams%22%2C%0A%20%20%20%20%20%20%22MSAL.PS%22%2C%0A%20%20%20%20%20%20%22MSCommerce%22%2C%0A%20%20%20%20%20%20%22MSOnline%22%2C%0A%20%20%20%20%20%20%22Oh-My-Posh%22%2C%0A%20%20%20%20%20%20%22ORCA%22%2C%0A%20%20%20%20%20%20%22PNP.PowerShell%22%2C%0A%20%20%20%20%20%20%22ps2exe%22%2C%0A%20%20%20%20%20%20%22PnP.PowerShell%22%2C%0A%20%20%20%20%20%20%22PSword%22%2C%0A%20%20%20%20%20%20%22PSWriteWord%22%2C%0A%20%20%20%20%20%20%22Posh-Git%22%2C%0A%20%20%20%20%20%20%22Powershell-yaml%22%2C%0A%20%20%20%20%20%20%22PSReadLine%22%2C%0A%20%20%20%20%20%20%22PSParseHTML%22%2C%0A%20%20%20%20%20%20%22PSWindowsUpdate%22%2C%0A%20%20%20%20%20%20%22SQLServer%22%2C%0A%20%20%20%20%20%20%22VMware.PowerCLI%22%0A%20%20%20%5D%2C%0A%20%20%20%22PowerShellProfile%22%3A%20%5B%0A%20%20%20%20%20%20%22Import-Module%20Oh-My-Posh%22%2C%0A%20%20%20%20%20%20%22Import-Module%20Posh-Git%22%2C%0A%20%20%20%20%20%20%22Set-PSReadlineKeyHandler%20-Key%20Tab%20-Function%20Complete%22%2C%0A%20%20%20%20%20%20%22Set-PSReadLineOption%20-PredictionSource%20History%22%2C%0A%20%20%20%20%20%20%22%5BNet.ServicePointManager%5D%3A%3ASecurityProtocol%20%3D%20%5BNet.SecurityProtocolType%5D%3A%3ATls12%22%0A%20%20%20%5D%2C%0A%20%20%20%22RSATTools%22%3A%20%5B%0A%20%20%20%20%20%20%22Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.BitLocker.Recovery.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.CertificateServices.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.DHCP.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.Dns.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.FailoverCluster.Management.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.FileServices.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.IPAM.Client.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.LLDP.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.NetworkController.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.NetworkLoadBalancing.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.RemoteAccess.Management.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.RemoteDesktop.Services.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.ServerManager.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.Shielded.VM.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.StorageMigrationService.Management.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.StorageReplica.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.SystemInsights.Management.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.VolumeActivation.Tools~~~~0.0.1.0%22%2C%0A%20%20%20%20%20%20%22Rsat.WSUS.Tools~~~~0.0.1.0%22%0A%20%20%20%5D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-3139719%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EWindows%20PowerShell%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Valued Contributor

Whenever I reinstall my Windows laptop (Or a new management VM), I have a lot of apps, modules, RSAT Tools, Sysinternals tools  and settings that need to be installed or configured. So... Let's automate that :) Below are my installation scripts which you can use to install everything, or just the programs or perhaps just the PowerShell modules. Options are there to do so and you can add/remove things in the JSON file easily and let it run again. Just put the three files in one location, run install.cmd as Administrator and lean back...

Shortcuts for newly installed software will be removed from your desktop, hate those ;) , and programs that start automatically after installing will be closed. Be aware of the fact that your machine might restart during installation, save your work and you can re-run the script to continue installing the rest (It will check and skip things that are already installed)

Install.cmd 

 

 

@echo off
TITLE Installing Apps, Features and PowerShell Modules...
echo Your computer might restart, please save your work before continuing!
echo After restart, you can restart this script to finish installation
pause
powershell -executionpolicy bypass -noprofile -file "%~dp0install_apps.ps1" -All
echo Logging is available in %Temp%\Install.log
echo Press any to update installed apps or CTRL-C to exit and then reboot your system manually
pause
winget upgrade --all --silent --force
echo. 
echo Done updating, press any key to quit and reboot your system manually
pause

 

 

 

Install_Apps.ps1

 

 

<#
.SYNOPSIS

Installs Programs, Modules, Features and settings using Winget and PowerShell

.DESCRIPTION

Installs/Configures all options from the .json file

.PARAMETER All
Install all Programs, Modules, Features and Settings

.PARAMETER Apps
Install all Software

.PARAMETER Features
Install all Windows Features

.PARAMETER MicrosftVCRuntime
Install all Microsoft VC++ Runtimes

.PARAMETER PowerShellCommands
Execute all PowerShell commands like Update-Help

.PARAMETER PowerShellModules
Install all PowerShell Modules

.PARAMETER PowerShellModulesUpdate
Update all installed PowerShell Modules to the latest version

.PARAMETER PowerShellProfile
Update the PowerShell Profile

.PARAMETER RSATTools
Install the Windows Remote System Administration Tools

.PARAMETER $SCCMTools
Install the System Center Configuration Manager tools like CMTrace

.PARAMETER SysInternalsSuite
Install the Windows Remote System Administration Tools

.PARAMETER IntuneWinAppUtil
Install the IntuneWinAppUtil in c:\windows\system32

.INPUTS

Defaults to -All if no other Parameters are specified

.OUTPUTS

Screen output and TransAction log which is available in %Temp%\Install.log

.EXAMPLE

PS> Install_Apps.ps1 -Apps
Installs all Applications

.EXAMPLE

PS> Install_Apps.ps1 -SCCMTools -PowerShellModule
Installs the System Center Configuration Manager Tools and installs all PowerShell Modules

.LINK

None

#>

#Parameters
[CmdletBinding(DefaultParameterSetName = "All")]
param (
    [Parameter(Mandatory = $False, HelpMessage = "Install all Software, Modules, Features and Settings", ParameterSetName = "All")][Switch]$All,
    [Parameter(Mandatory = $false, HelpMessage = "Install all Software", ParameterSetName = "Optional")][Switch]$Apps,
    [Parameter(Mandatory = $false, HelpMessage = "Install all Windows Features", ParameterSetName = "Optional")][Switch]$Features,
    [Parameter(Mandatory = $false, HelpMessage = "Install all Microsoft VC++ Runtimes", ParameterSetName = "Optional")][Switch]$MicrosftVCRuntime,
    [Parameter(Mandatory = $false, HelpMessage = "Execute all PowerShell commands like Update-Help", ParameterSetName = "Optional")][Switch]$PowerShellCommands,
    [Parameter(Mandatory = $false, HelpMessage = "Install all PowerShell Modules", ParameterSetName = "Optional")][Switch]$PowerShellModules,
    [Parameter(Mandatory = $false, HelpMessage = "Update all installed PowerShell Modules to the latest version", ParameterSetName = "Optional")][Switch]$PowerShellModulesUpdate,
    [Parameter(Mandatory = $false, HelpMessage = "Update the PowerShell Profile", ParameterSetName = "Optional")][Switch]$PowerShellProfile,
    [Parameter(Mandatory = $false, HelpMessage = "Install the Windows Remote System Administration Tools", ParameterSetName = "Optional")][Switch]$RSATTools,
    [Parameter(Mandatory = $false, HelpMessage = "Install the System Center Configuration Manager tools like CMTrace", ParameterSetName = "Optional")][Switch]$SCCMTools,
    [Parameter(Mandatory = $false, HelpMessage = "Install all SysInternals Suite tools and add them to the system path", ParameterSetName = "Optional")][Switch]$SysInternalsSuite,
    [Parameter(Mandatory = $false, HelpMessage = "Install the IntuneWinAppUtil to c:\windows\system32", ParameterSetName = "Optional")][Switch]$IntuneWinAppUtil
)
if ($PSCmdlet.ParameterSetName -eq 'All') {
    Write-Host No parameter was specified and using all options -ForegroundColor Green
    $All = $True
}

#Requires -RunAsAdministrator
#Start Transcript logging in Temp folder
Start-Transcript $ENV:TEMP\install.log

#Set-Executionpolicy and no prompting
Set-ExecutionPolicy Bypass -Force:$True -Confirm:$false -ErrorAction SilentlyContinue
Set-Variable -Name 'ConfirmPreference' -Value 'None' -Scope Global

#Change invoke-webrequest progress bar to hidden for faster downloads
$ProgressPreference = 'SilentlyContinue'

#Import list of apps, features and modules that can be installed using json file
$json = Get-Content "$($PSScriptRoot)\Install_apps.json" | ConvertFrom-Json

#Check if Winget is installed, if not install it by installing VCLibs (Prerequisite) followed by Winget itself
if ($Apps -or $MicrosftVCRuntime -or $All) {
    if (!(Get-AppxPackage -Name Microsoft.Winget.Source)) {
        Write-Host Winget was not found and installing now -ForegroundColor Yellow
        Invoke-Webrequest -uri https://aka.ms/Microsoft.VCLibs.x64.14.00.Desktop.appx -Outfile $ENV:TEMP\Microsoft.VCLibs.x64.14.00.Desktop.appx
        Invoke-Webrequest -uri https://aka.ms/getwinget -Outfile $ENV:TEMP\winget.msixbundle    
        Add-AppxPackage $ENV:TEMP\Microsoft.VCLibs.x64.14.00.Desktop.appx -ErrorAction SilentlyContinue
        Add-AppxPackage -Path $ENV:TEMP\winget.msixbundle -ErrorAction SilentlyContinue
    }
}

if ($MicrosftVCRuntime -or $All) {
    #Install Microsoft Visual C++ Runtimes using WinGet
    Write-Host Installing Microsoft Visual C++ Runtime versions but skipping install if already present -ForegroundColor Green
    $CurrentVC = Get-WmiObject -Class Win32_Product -Filter "Name LIKE '%Visual C++%'" -ErrorAction SilentlyContinue | Select-Object Name
    Foreach ($App in $json.MicrosftVCRuntime) {
        Write-Host Checking if $App is already installed...
        if (!($CurrentVC | Select-String $App.split('+')[2].SubString(0, 4) | Select-String $App.split('-')[1])) {
            Write-Host $App was not found and installing now -ForegroundColor Yellow
            winget.exe install $App --silent --force --source winget --accept-package-agreements --accept-source-agreements
        }
    }
}

if ($Apps -or $All) {
    #Install applications using WinGet
    Write-Host Installing Applications but skipping install if already present -ForegroundColor Green
    Foreach ($App in $json.Apps) {
        Write-Host Checking if $App is already installed...
        winget.exe list --id $App --accept-source-agreements | Out-Null
        if ($LASTEXITCODE -eq '-1978335212') {
            Write-Host $App.Split('.')[1] was not found and installing now -ForegroundColor Yellow
            winget.exe install $App --silent --force --source winget --accept-package-agreements --accept-source-agreements
            Foreach ($Application in $json.ProcessesToKill) {
                get-process $Application -ErrorAction SilentlyContinue | Stop-Process -Force:$True -Confirm:$false
            }
        } 
    }
    #Clean-up downloaded Winget Packages
    Remove-Item $ENV:TEMP\Winget -Recurse -Force:$True -ErrorAction:SilentlyContinue

    #Cleanup shortcuts from installed applications
    Foreach ($File in $json.filestoclean) {
        Write-Host Cleaning $File from personal ad public Windows Desktop -ForegroundColor Green
        $UserDesktop = ([Environment]::GetFolderPath("Desktop"))
        Get-ChildItem C:\users\public\Desktop\$File -ErrorAction SilentlyContinue | Where-Object LastWriteDate -LE ((Get-Date).AddHours( - 1)) | Remove-Item -Force:$True
        Get-ChildItem $UserDesktop\$File -ErrorAction SilentlyContinue | Where-Object LastWriteDate -LE ((Get-Date).AddHours( - 1)) | Remove-Item -Force:$True
        Get-ChildItem C:\users\public\Desktop\$File -Hidden -ErrorAction SilentlyContinue | Where-Object LastWriteDate -LE ((Get-Date).AddHours( - 1)) | Remove-Item -Force:$True
        Get-ChildItem $UserDesktop\$File -Hidden -ErrorAction SilentlyContinue | Where-Object LastWriteDate -LE ((Get-Date).AddHours( - 1)) | Remove-Item -Force:$True
    }
}

if ($SCCMTools -or $All) {
    #Download and install System Center 2012 R2 Configuration Manager Toolkit for CMTRACE tool
    Write-Host Checking if System Center 2012 R2 Configuration Manager Toolkit is already installed -ForegroundColor Green
    if (!(Test-Path 'C:\Program Files (x86)\ConfigMgr 2012 Toolkit R2')) {
        Write-Host SCCM 2012 R2 Toolkit was not found and installing now -ForegroundColor Yellow
        Invoke-Webrequest -uri https://download.microsoft.com/download/5/0/8/508918E1-3627-4383-B7D8-AA07B3490D21/ConfigMgrTools.msi -UseBasicParsing -Outfile $ENV:TEMP\ConfigMgrTools.msi
        msiexec.exe /i $ENV:TEMP\ConfigMgrTools.msi /qn    
    }
}

if ($SysInternalsSuite -or $All) {
    #Download and extract SysInternals Suite and add to system path
    Write-Host Checking if SysInternals Suite is present -ForegroundColor Green
    if (!(Test-Path 'C:\Program Files (x86)\SysInterals Suite')) {
        Write-Host SysInternalsSuite was not found and installing now -ForegroundColor Yellow
        Invoke-Webrequest -uri https://download.sysinternals.com/files/SysinternalsSuite.zip -Outfile $ENV:TEMP\SysInternalsSuite.zip
        Expand-Archive -LiteralPath $ENV:TEMP\SysInternalsSuite.zip -DestinationPath 'C:\Program Files (x86)\SysInterals Suite'
        $OldPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path
        $NewPath = $OldPath + ';C:\Program Files (x86)\SysInterals Suite\'
        Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH -Value $NewPath
    }
}

if ($IntuneWinAppUtil -or $All) {
    #Download IntuneWinAppUtil to c:\windows\system32
    Write-Host Checking if IntuneWinAppUtil Suite is present -ForegroundColor Green
    if (!(Test-Path 'c:\windows\system32\IntuneWinAppUtil.exe')) {
        Write-Host IntuneWinAppUtil was not found and installing now -ForegroundColor Yellow
        Invoke-Webrequest -uri https://github.com/microsoft/Microsoft-Win32-Content-Prep-Tool/raw/master/IntuneWinAppUtil.exe -Outfile c:\windows\system32\intunewinapputil.exe
    }
}

if ($Features -or $All) {
    #Install Features
    Write-Host Installing Features but skipping install if already present -ForegroundColor Green
    Foreach ($Feature in $json.Features) {
        Write-Host Checking if $Feature is already installed...
        if ((Get-WindowsOptionalFeature -Online -FeatureName:$Feature).State -ne 'Enabled') {
            Write-Host $Feature was not found and installing now -ForegroundColor Yellow
            Enable-WindowsOptionalFeature -Online -FeatureName:$Feature -NoRestart:$True -ErrorAction SilentlyContinue | Out-Null
        }
    }
}

if ($PowerShellModules -or $All) {
    #Install PowerShell Modules
    Write-Host Installing Modules but skipping install if already present -ForegroundColor Green
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

    Set-PSRepository PSGallery -InstallationPolicy Trusted

    Foreach ($Module in $json.PowerShellModules) {
        Write-Host Checking if the $Module is already installed...
        if (!(Get-Module $Module -ListAvailable)) {
            Write-Host $Module PowerShell Module was not found and installing now -ForegroundColor Yellow
            Install-Module -Name $Module -Scope AllUsers -Force:$True -AllowClobber:$True
        }
    }
}

if ($RSATTools -or $All) {
    #Install selected RSAT Tools
    Write-Host Installing RSAT components but skipping install if already present -ForegroundColor Green
    Foreach ($Tool in $json.RSATTools) {
        Write-Host Checking if $Tool.Split('~')[0] is already installed...
        if ((Get-WindowsCapability -Online -Name:$Tool).State -ne 'Installed') {
            Write-Host $Tool.Split('~')[0] was not found and installing now -ForegroundColor Yellow
            DISM.exe /Online /add-capability /CapabilityName:$Tool /NoRestart /Quiet | Out-Null
        }
    }
}

if ($PowerShellProfile -or $All) {
    #Add settings to PowerShell Profile (Creating Profile if not exist)
    Write-Host Adding settings to PowerShell Profile but skipping setting if already present -ForegroundColor Green
    Foreach ($Setting in $json.PowerShellProfile) {
        Write-Host Checking if $Setting is already added...
        if (!(Test-Path $profile)) {
            New-Item -Path $profile -ItemType:File -Force:$True | out-null 
        }
        if (!(Get-Content $profile | Select-String -Pattern $Setting -SimpleMatch)) {
            Write-Host $Setting was not found and adding now -ForegroundColor Yellow
            Add-Content $profile "`n$($Setting)"
        }
    }
}

if ($PowerShellModulesUpdate -or $All) {
    #Update PowerShell Modules if needed
    Write-Host Checking for older versions of PowerShell Modules and removing those if present -ForegroundColor Green
    Set-PSRepository PSGallery -InstallationPolicy Trusted

    Foreach ($Module in Get-InstalledModule | Select-Object Name) {
        Write-Host Checking for older versions of the $Module.Name PowerShell Module
        $AllVersions = Get-InstalledModule -Name $Module.Name -AllVersions -ErrorAction:SilentlyContinue
        $AllVersions = $AllVersions | Sort-Object PublishedDate -Descending 
        $MostRecentVersion = $AllVersions[0].Version
        if ($AllVersions.Count -gt 1 ) {
            Foreach ($Version in $AllVersions) {
                if ($Version.Version -ne $MostRecentVersion) {
                    Write-Host "Uninstalling previous version" $Version.Version "of Module" $Module.Name -ForegroundColor Yellow
                    Uninstall-Module -Name $Module.Name -RequiredVersion $Version.Version -Force:$True
                }
            }
        }
    }
}

if ($PowerShellCommands -or $All) {
    #Run PowerShell commandline options
    Write-Host Running Commandline options and this could take a while -ForegroundColor Green
    Foreach ($Command in $json.PowerShellCommands) {
        Write-Host Running $Command -ForegroundColor Yellow
        Powershell.exe -Executionpolicy Bypass -Command $Command
    }
}

#Stop Transcript logging
Stop-Transcript

 

 

 

Install_Apps.json

 

 

{
   "Apps": [
      "Microsoft.SQLServerManagementStudio",
      "7zip.7zip",
      "Adobe.Acrobat.Reader.64-bit",
      "AnyConnect",
      "BraveSoftware.BraveBrowser",
      "Canonical.Ubuntu",
      "Cisco.CiscoWebexMeetings",
      "Citrix.Workspace",
      "Famatech.AdvancedIPScanner",
      "Fortinet.FortiClientVPN",
      "Git.Git",
      "GitHub.GitHubDesktop",
      "Google.Chrome",
      "Graphviz.Graphviz",
      "Insecure.Nmap",
      "JAMSoftware.TreeSize.Free",
      "Microsoft.AzureCLI",
      "Microsoft.AzureStorageExplorer",
      "Microsoft.DeploymentToolkit",
      "Microsoft.dotnetRuntime.3-x64",
      "Microsoft.dotnetRuntime.3-x86",
      "Microsoft.dotnetRuntime.5-x64",
      "Microsoft.dotnetRuntime.5-x86",
      "Microsoft.EdgeWebView2Runtime",
      "Microsoft.PowerBI",
      "Microsoft.Powershell",
      "Microsoft.PowerToys",
      "Microsoft.RemoteDesktopClient",
      "Microsoft.VisualStudioCode",
      "Microsoft.WindowsAdminCenter",
      "Microsoft.WindowsADK",
      "Microsoft.WindowsTerminal",
      "Microsoft.XMLNotepad",
      "Mozilla.FireFox",
      "Notepad++.Notepad++",
      "Obsidian.Obsidian",
      "Ookla.Speedtest",
      "OpenVPNTechnologies.OpenVPNConnect",
      "Oracle.JavaRuntimeEnvironment",
      "PuTTY.PuTTY",
      "Python.Python.3",
      "Rufus.Rufus",
      "Teamviewer.Teamviewer",
      "Telerik.Fiddler",
      "VideoLAN.VLC",
      "WinSCP.WinSCP",
      "WiresharkFoundation.Wireshark",
      "Zoom.Zoom"
   ],
   "Features": [
      "Containers-DisposableClientVM",
      "Microsoft-Windows-Subsystem-Linux",
      "TelnetClient",
      "TFTP"
   ],
   "FilesToClean": [
      "*.lnk",
      "desktop.ini"
   ],
   "MicrosftVCRuntime": [
      "Microsoft.VC++2008Redist-x86",
      "Microsoft.VC++2008Redist-x64",
      "Microsoft.VC++2010Redist-x64",
      "Microsoft.VC++2010Redist-x86",
      "Microsoft.VC++2012Redist-x64",
      "Microsoft.VC++2012Redist-x86",
      "Microsoft.VC++2013Redist-x64",
      "Microsoft.VC++2013Redist-x86"
   ],
   "ProcessesToKill": [
      "advanced_ip_scanner",
      "OpenVPNConnect",
      "PowerToys.Settings",
      "PtSrv",
      "PtSrv"
   ],
   "PowerShellCommands": [
      "Update-Help -Confirm:$False -Force:$True -ErrorAction:SilentlyContinue"
   ],
   "PowerShellModules": [
      "AIPService",
      "AzureAD",
      "AzureRM",
      "AZViz",
      "AzureADPreview",
      "ExchangeOnlineManagement",
      "IntuneBackupAndRestore",
      "IntuneDocumentation",
      "IntuneWin32App",
      "Microsoft.Graph.Intune",
      "M365Documentation",
      "MSGraphFunctions",
      "Microsoft.Online.SharePoint.PowerShell",
      "Microsoft.PowerApps.Administration.Powershell",
      "Microsoft.PowerShell.Crescendo",
      "Microsoft.PowerShell.SecretManagement",
      "Microsoft.PowerShell.SecretStore",
      "MicrosoftTeams",
      "MSAL.PS",
      "MSCommerce",
      "MSOnline",
      "Oh-My-Posh",
      "ORCA",
      "PNP.PowerShell",
      "ps2exe",
      "PnP.PowerShell",
      "PSword",
      "PSWriteWord",
      "Posh-Git",
      "Powershell-yaml",
      "PSReadLine",
      "PSParseHTML",
      "PSWindowsUpdate",
      "SQLServer",
      "VMware.PowerCLI",
      "WindowsAutoPilotIntune"
   ],
   "PowerShellProfile": [
      "Import-Module Oh-My-Posh",
      "Import-Module Posh-Git",
      "Set-PSReadlineKeyHandler -Key Tab -Function Complete",
      "Set-PSReadLineOption -PredictionSource History",
      "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12"
   ],
   "RSATTools": [
      "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0",
      "Rsat.BitLocker.Recovery.Tools~~~~0.0.1.0",
      "Rsat.CertificateServices.Tools~~~~0.0.1.0",
      "Rsat.DHCP.Tools~~~~0.0.1.0",
      "Rsat.Dns.Tools~~~~0.0.1.0",
      "Rsat.FailoverCluster.Management.Tools~~~~0.0.1.0",
      "Rsat.FileServices.Tools~~~~0.0.1.0",
      "Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0",
      "Rsat.IPAM.Client.Tools~~~~0.0.1.0",
      "Rsat.LLDP.Tools~~~~0.0.1.0",
      "Rsat.NetworkController.Tools~~~~0.0.1.0",
      "Rsat.NetworkLoadBalancing.Tools~~~~0.0.1.0",
      "Rsat.RemoteAccess.Management.Tools~~~~0.0.1.0",
      "Rsat.RemoteDesktop.Services.Tools~~~~0.0.1.0",
      "Rsat.ServerManager.Tools~~~~0.0.1.0",
      "Rsat.Shielded.VM.Tools~~~~0.0.1.0",
      "Rsat.StorageMigrationService.Management.Tools~~~~0.0.1.0",
      "Rsat.StorageReplica.Tools~~~~0.0.1.0",
      "Rsat.SystemInsights.Management.Tools~~~~0.0.1.0",
      "Rsat.VolumeActivation.Tools~~~~0.0.1.0",
      "Rsat.WSUS.Tools~~~~0.0.1.0"
   ]
}

 

 

 

2 Replies
Pretty nice, not gonna lie. :'D

Thank you, still work in progress but I think I have most things covered now ;)