Created
July 3, 2018 06:06
-
-
Save rdbartram/bd2521c096a81a3ea67213a3d4c7a575 to your computer and use it in GitHub Desktop.
Script to install my machine back to working state. Apps, Configs etc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ProgressPreference = "SilentlyContinue" | |
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 | |
# Enable WinRM | |
Enable-PSRemoting -Force -SkipNetworkProfileCheck | |
# Install PowerShell | |
if (-not (Invoke-DscResource -Name Package -ModuleName PSDesiredStateConfiguration -Method Test -Property @{ Ensure = "Present"; Path = "$env:temp\powershell.msi"; Name = "PowerShell 6-preview-x64"; ProductID = '' })) { | |
Write-Verbose "Installing latest version of PowerShell" -Verbose | |
$LatestRelease = irm https://api.github.com/repos/powershell/powershell/releases/latest | |
$Win64Release = $LatestRelease.Assets | ? { $_.name -match 'x64.msi' } | |
irm $Win64Release.browser_download_url -OutFile $env:temp\powershell.msi | |
Invoke-DscResource -Name Package -ModuleName PSDesiredStateConfiguration -Method Set -Property @{ Ensure = "Present"; Path = "$env:temp\powershell.msi"; arguments = "/quiet /passive ADD_EXPLORER_CONTEXT_MENU_OPENPOWERSHELL=1 ENABLE_PSREMOTING=1 REGISTER_MANIFEST=1"; Name = "PowerShell 6-preview-x64"; ProductID = '' } | |
} | |
# VSCode | |
if (-not (Invoke-DscResource -Name Package -ModuleName PSDesiredStateConfiguration -Method Test -Property @{ Ensure = "Present"; Path = "$env:temp\vscode.exe"; Name = "Microsoft Visual Studio Code Insiders"; ProductID = '' })) { | |
Write-Verbose "Installing latest version of Code Insiders" -Verbose | |
irm https://go.microsoft.com/fwlink/?Linkid=852155 -OutFile $env:temp\vscode.exe | |
Invoke-DscResource -Name Package -ModuleName PSDesiredStateConfiguration -Method Set -Property @{ Ensure = "Present"; Path = "$env:temp\vscode.exe"; arguments = "/silent /mergetasks='!runcode,addcontextmenufiles,addcontextmenufolders,associatewithfiles,addtopath'"; Name = "Microsoft Visual Studio Code Insiders"; ProductID = '' } | |
} | |
# Install Extensions | |
$InstalledExtensions = & "C:\Program Files\Microsoft VS Code Insiders\bin\code-insiders.cmd" --list-extensions | |
@("chenxsan.vscode-standardjs", | |
"CoenraadS.bracket-pair-colorizer", | |
"danmannock.vscode-fsharp-refactor", | |
"DavidAnson.vscode-markdownlint", | |
"denco.confluence-markup", | |
"DotJoshJohnson.xml", | |
"eamodio.gitlens", | |
"eg2.vscode-npm-script", | |
"evilz.vscode-reveal", | |
"GrapeCity.gc-excelviewer", | |
"hdg.live-html-previewer", | |
"humao.rest-client", | |
"idleberg.hopscotch", | |
"Ionide.Ionide-fsharp", | |
"jspolancor.presentationmode", | |
"ms-mssql.mssql", | |
"ms-vscode.azure-account", | |
"ms-vscode.cpptools", | |
"ms-vscode.csharp", | |
"ms-vscode.Go", | |
"ms-vscode.PowerShell", | |
"ms-vsliveshare.vsliveshare", | |
"ms-vsts.team", | |
"nhoizey.gremlins", | |
"PeterJausovec.vscode-docker", | |
"redhat.vscode-yaml", | |
"robertohuertasm.vscode-icons", | |
"Shan.code-settings-sync", | |
"tberman.json-schema-validator", | |
"yzhang.markdown-all-in-one", | |
"zhuangtongfa.Material-theme") | ForEach-Object -Process { | |
if ($_ -notin $InstalledExtensions) { | |
Write-Verbose "Installing VSCode extension $_" -Verbose | |
& "C:\Program Files\Microsoft VS Code Insiders\bin\code-insiders.cmd" --install-extension $_ | Out-Null | |
} | |
} | |
# Install Git for Windows | |
if (-not (Invoke-DscResource -Name Package -ModuleName PSDesiredStateConfiguration -Method Test -Property @{ Ensure = "Present"; Path = "$env:temp\git.exe"; Name = "Git version 2.18.0"; ProductID = '' })) { | |
Write-Verbose "Installing latest version of Git for Windows" -Verbose | |
$LatestRelease = irm https://api.github.com/repos/git-for-windows/git/releases/latest | |
$Win64Release = $LatestRelease.Assets | ? { $_.name -match 'Git.+64-bit.exe' } | |
irm $Win64Release.browser_download_url -OutFile $env:temp\git.exe | |
Invoke-DscResource -Name Package -ModuleName PSDesiredStateConfiguration -Method Set -Property @{ Ensure = "Present"; Path = "$env:temp\git.exe"; arguments = '/VERYSILENT /NORESTART /NOCANCEL /SP- /CLOSEAPPLICATIONS /RESTARTAPPLICATIONS /COMPONENTS="icons,ext\reg\shellhere,assoc,assoc_sh"'; Name = "Git version 2.18.0"; ProductID = '' } | |
} | |
# console | |
Write-Verbose "Set console" -Verbose | |
regedit /s console.reg | |
# Onedrive | |
Write-Verbose "Setting OneDrive" -Verbose | |
function Set-KnownFolderPath { | |
Param ( | |
[Parameter(Mandatory = $true)] | |
[ValidateSet('AddNewPrograms', 'AdminTools', 'AppUpdates', 'CDBurning', 'ChangeRemovePrograms', 'CommonAdminTools', 'CommonOEMLinks', 'CommonPrograms', 'CommonStartMenu', 'CommonStartup', 'CommonTemplates', 'ComputerFolder', 'ConflictFolder', 'ConnectionsFolder', 'Contacts', 'ControlPanelFolder', 'Cookies', 'Desktop', 'Documents', 'Downloads', 'Favorites', 'Fonts', 'Games', 'GameTasks', 'History', 'InternetCache', 'InternetFolder', 'Links', 'LocalAppData', 'LocalAppDataLow', 'LocalizedResourcesDir', 'Music', 'NetHood', 'NetworkFolder', 'OriginalImages', 'PhotoAlbums', 'Pictures', 'Playlists', 'PrintersFolder', 'PrintHood', 'Profile', 'ProgramData', 'ProgramFiles', 'ProgramFilesX64', 'ProgramFilesX86', 'ProgramFilesCommon', 'ProgramFilesCommonX64', 'ProgramFilesCommonX86', 'Programs', 'Public', 'PublicDesktop', 'PublicDocuments', 'PublicDownloads', 'PublicGameTasks', 'PublicMusic', 'PublicPictures', 'PublicVideos', 'QuickLaunch', 'Recent', 'RecycleBinFolder', 'ResourceDir', 'RoamingAppData', 'SampleMusic', 'SamplePictures', 'SamplePlaylists', 'SampleVideos', 'SavedGames', 'SavedSearches', 'SEARCH_CSC', 'SEARCH_MAPI', 'SearchHome', 'SendTo', 'SidebarDefaultParts', 'SidebarParts', 'StartMenu', 'Startup', 'SyncManagerFolder', 'SyncResultsFolder', 'SyncSetupFolder', 'System', 'SystemX86', 'Templates', 'TreeProperties', 'UserProfiles', 'UsersFiles', 'Videos', 'Windows')] | |
[string]$KnownFolder, | |
[Parameter(Mandatory = $true)] | |
[string]$Path | |
) | |
# Define known folder GUIDs | |
$KnownFolders = @{ | |
'AddNewPrograms' = 'de61d971-5ebc-4f02-a3a9-6c82895e5c04'; | |
'AdminTools' = '724EF170-A42D-4FEF-9F26-B60E846FBA4F'; | |
'AppUpdates' = 'a305ce99-f527-492b-8b1a-7e76fa98d6e4'; | |
'CDBurning' = '9E52AB10-F80D-49DF-ACB8-4330F5687855'; | |
'ChangeRemovePrograms' = 'df7266ac-9274-4867-8d55-3bd661de872d'; | |
'CommonAdminTools' = 'D0384E7D-BAC3-4797-8F14-CBA229B392B5'; | |
'CommonOEMLinks' = 'C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D'; | |
'CommonPrograms' = '0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8'; | |
'CommonStartMenu' = 'A4115719-D62E-491D-AA7C-E74B8BE3B067'; | |
'CommonStartup' = '82A5EA35-D9CD-47C5-9629-E15D2F714E6E'; | |
'CommonTemplates' = 'B94237E7-57AC-4347-9151-B08C6C32D1F7'; | |
'ComputerFolder' = '0AC0837C-BBF8-452A-850D-79D08E667CA7'; | |
'ConflictFolder' = '4bfefb45-347d-4006-a5be-ac0cb0567192'; | |
'ConnectionsFolder' = '6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD'; | |
'Contacts' = '56784854-C6CB-462b-8169-88E350ACB882'; | |
'ControlPanelFolder' = '82A74AEB-AEB4-465C-A014-D097EE346D63'; | |
'Cookies' = '2B0F765D-C0E9-4171-908E-08A611B84FF6'; | |
'Desktop' = 'B4BFCC3A-DB2C-424C-B029-7FE99A87C641'; | |
'Documents' = @('FDD39AD0-238F-46AF-ADB4-6C85480369C7', 'f42ee2d3-909f-4907-8871-4c22fc0bf756'); | |
'Downloads' = @('374DE290-123F-4565-9164-39C4925E467B', '7d83ee9b-2244-4e70-b1f5-5393042af1e4'); | |
'Favorites' = '1777F761-68AD-4D8A-87BD-30B759FA33DD'; | |
'Fonts' = 'FD228CB7-AE11-4AE3-864C-16F3910AB8FE'; | |
'Games' = 'CAC52C1A-B53D-4edc-92D7-6B2E8AC19434'; | |
'GameTasks' = '054FAE61-4DD8-4787-80B6-090220C4B700'; | |
'History' = 'D9DC8A3B-B784-432E-A781-5A1130A75963'; | |
'InternetCache' = '352481E8-33BE-4251-BA85-6007CAEDCF9D'; | |
'InternetFolder' = '4D9F7874-4E0C-4904-967B-40B0D20C3E4B'; | |
'Links' = 'bfb9d5e0-c6a9-404c-b2b2-ae6db6af4968'; | |
'LocalAppData' = 'F1B32785-6FBA-4FCF-9D55-7B8E7F157091'; | |
'LocalAppDataLow' = 'A520A1A4-1780-4FF6-BD18-167343C5AF16'; | |
'LocalizedResourcesDir' = '2A00375E-224C-49DE-B8D1-440DF7EF3DDC'; | |
'Music' = @('4BD8D571-6D19-48D3-BE97-422220080E43', 'a0c69a99-21c8-4671-8703-7934162fcf1d'); | |
'NetHood' = 'C5ABBF53-E17F-4121-8900-86626FC2C973'; | |
'NetworkFolder' = 'D20BEEC4-5CA8-4905-AE3B-BF251EA09B53'; | |
'OriginalImages' = '2C36C0AA-5812-4b87-BFD0-4CD0DFB19B39'; | |
'PhotoAlbums' = '69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C'; | |
'Pictures' = @('33E28130-4E1E-4676-835A-98395C3BC3BB', '0ddd015d-b06c-45d5-8c4c-f59713854639'); | |
'Playlists' = 'DE92C1C7-837F-4F69-A3BB-86E631204A23'; | |
'PrintersFolder' = '76FC4E2D-D6AD-4519-A663-37BD56068185'; | |
'PrintHood' = '9274BD8D-CFD1-41C3-B35E-B13F55A758F4'; | |
'Profile' = '5E6C858F-0E22-4760-9AFE-EA3317B67173'; | |
'ProgramData' = '62AB5D82-FDC1-4DC3-A9DD-070D1D495D97'; | |
'ProgramFiles' = '905e63b6-c1bf-494e-b29c-65b732d3d21a'; | |
'ProgramFilesX64' = '6D809377-6AF0-444b-8957-A3773F02200E'; | |
'ProgramFilesX86' = '7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E'; | |
'ProgramFilesCommon' = 'F7F1ED05-9F6D-47A2-AAAE-29D317C6F066'; | |
'ProgramFilesCommonX64' = '6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D'; | |
'ProgramFilesCommonX86' = 'DE974D24-D9C6-4D3E-BF91-F4455120B917'; | |
'Programs' = 'A77F5D77-2E2B-44C3-A6A2-ABA601054A51'; | |
'Public' = 'DFDF76A2-C82A-4D63-906A-5644AC457385'; | |
'PublicDesktop' = 'C4AA340D-F20F-4863-AFEF-F87EF2E6BA25'; | |
'PublicDocuments' = 'ED4824AF-DCE4-45A8-81E2-FC7965083634'; | |
'PublicDownloads' = '3D644C9B-1FB8-4f30-9B45-F670235F79C0'; | |
'PublicGameTasks' = 'DEBF2536-E1A8-4c59-B6A2-414586476AEA'; | |
'PublicMusic' = '3214FAB5-9757-4298-BB61-92A9DEAA44FF'; | |
'PublicPictures' = 'B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5'; | |
'PublicVideos' = '2400183A-6185-49FB-A2D8-4A392A602BA3'; | |
'QuickLaunch' = '52a4f021-7b75-48a9-9f6b-4b87a210bc8f'; | |
'Recent' = 'AE50C081-EBD2-438A-8655-8A092E34987A'; | |
'RecycleBinFolder' = 'B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC'; | |
'ResourceDir' = '8AD10C31-2ADB-4296-A8F7-E4701232C972'; | |
'RoamingAppData' = '3EB685DB-65F9-4CF6-A03A-E3EF65729F3D'; | |
'SampleMusic' = 'B250C668-F57D-4EE1-A63C-290EE7D1AA1F'; | |
'SamplePictures' = 'C4900540-2379-4C75-844B-64E6FAF8716B'; | |
'SamplePlaylists' = '15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5'; | |
'SampleVideos' = '859EAD94-2E85-48AD-A71A-0969CB56A6CD'; | |
'SavedGames' = '4C5C32FF-BB9D-43b0-B5B4-2D72E54EAAA4'; | |
'SavedSearches' = '7d1d3a04-debb-4115-95cf-2f29da2920da'; | |
'SEARCH_CSC' = 'ee32e446-31ca-4aba-814f-a5ebd2fd6d5e'; | |
'SEARCH_MAPI' = '98ec0e18-2098-4d44-8644-66979315a281'; | |
'SearchHome' = '190337d1-b8ca-4121-a639-6d472d16972a'; | |
'SendTo' = '8983036C-27C0-404B-8F08-102D10DCFD74'; | |
'SidebarDefaultParts' = '7B396E54-9EC5-4300-BE0A-2482EBAE1A26'; | |
'SidebarParts' = 'A75D362E-50FC-4fb7-AC2C-A8BEAA314493'; | |
'StartMenu' = '625B53C3-AB48-4EC1-BA1F-A1EF4146FC19'; | |
'Startup' = 'B97D20BB-F46A-4C97-BA10-5E3608430854'; | |
'SyncManagerFolder' = '43668BF8-C14E-49B2-97C9-747784D784B7'; | |
'SyncResultsFolder' = '289a9a43-be44-4057-a41b-587a76d7e7f9'; | |
'SyncSetupFolder' = '0F214138-B1D3-4a90-BBA9-27CBC0C5389A'; | |
'System' = '1AC14E77-02E7-4E5D-B744-2EB1AE5198B7'; | |
'SystemX86' = 'D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27'; | |
'Templates' = 'A63293E8-664E-48DB-A079-DF759E0509F7'; | |
'TreeProperties' = '5b3749ad-b49f-49c1-83eb-15370fbd4882'; | |
'UserProfiles' = '0762D272-C50A-4BB0-A382-697DCD729B80'; | |
'UsersFiles' = 'f3ce0f7c-4901-4acc-8648-d5d44b04ef8f'; | |
'Videos' = @('18989B1D-99B5-455B-841C-AB7C74E4DDFC', '35286a68-3c57-41a1-bbb1-0eae73d76c95'); | |
'Windows' = 'F38BF404-1D43-42F2-9305-67DE0B28FC23'; | |
} | |
# Define SHSetKnownFolderPath if it hasn't been defined already | |
$Type = ([System.Management.Automation.PSTypeName]'KnownFolders').Type | |
if (-not $Type) { | |
$Signature = @' | |
[DllImport("shell32.dll")] | |
public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, IntPtr token, [MarshalAs(UnmanagedType.LPWStr)] string path); | |
'@ | |
$Type = Add-Type -MemberDefinition $Signature -Name 'KnownFolders' -Namespace 'SHSetKnownFolderPath' -PassThru | |
} | |
# Make path, if doesn't exist | |
if (!(Test-Path $Path -PathType Container)) { | |
New-Item -Path $Path -type Directory -Force | |
} | |
# Validate the path | |
if (Test-Path $Path -PathType Container) { | |
# Call SHSetKnownFolderPath | |
foreach ($guid in $KnownFolders[$KnownFolder]) { | |
$result = $Type::SHSetKnownFolderPath([ref]$guid, 0, 0, $Path) | |
if ($result -ne 0) { | |
$errormsg = "Error redirecting $($KnownFolder). Return code $($result) = $((New-Object System.ComponentModel.Win32Exception($result)).message)" | |
throw $errormsg | |
} | |
} | |
} else { | |
throw New-Object System.IO.DirectoryNotFoundException "Could not find part of the path $Path." | |
} | |
# Fix up permissions, if we're still here | |
attrib +r $Path | |
$Leaf = Split-Path -Path "$Path" -Leaf | |
# Move-Item "$HOME\$Leaf\*" $Path | |
# rd $HOME\$Leaf -recurse -Force | |
} | |
$ONEDRIVESYNC = "$env:USERPROFILE\OneDrive - itnetx AG" | |
# Root Folders | |
Set-KnownFolderPath -KnownFolder 'Desktop' -Path "$ONEDRIVESYNC\Desktop" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Documents' -Path "$ONEDRIVESYNC\Documents" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Downloads' -Path "$ONEDRIVESYNC\Downloads" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Pictures' -Path "$ONEDRIVESYNC\Pictures" | Out-Null | |
# Annoying Other Folders | |
Set-KnownFolderPath -KnownFolder 'Contacts' -Path "$ONEDRIVESYNC\Work Sync\Contacts" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Favorites' -Path "$ONEDRIVESYNC\Work Sync\Favorites" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Links' -Path "$ONEDRIVESYNC\Work Sync\Links" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Music' -Path "$ONEDRIVESYNC\Work Sync\Music" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'SavedGames' -Path "$ONEDRIVESYNC\Work Sync\Saved Games" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'SavedSearches' -Path "$ONEDRIVESYNC\Work Sync\Searches" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'StartMenu' -Path "$ONEDRIVESYNC\Work Sync\Start Menu" | Out-Null | |
Set-KnownFolderPath -KnownFolder 'Videos' -Path "$ONEDRIVESYNC\Work Sync\Videos" | Out-Null | |
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\OneDrive -Name EnableADAL -Type DWORD -Value 1 -Force | |
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\OneDrive -Name EnableAllOcsiClients -Type DWORD -Value 1 -Force | |
Set-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\OneDrive -Name DefaultToBusinessFRE -Type DWORD -Value 1 -Force | |
start odopen://[email protected] | |
# Link GitConfig file | |
Write-Verbose "Creating link for gitconfig file" -Verbose | |
cmd /C "mklink .gitconfig `"$ONEDRIVESYNC\Documents\.gitconfig`"" | Out-Null |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment