Created
July 3, 2018 06:06
Revisions
-
rdbartram created this gist
Jul 3, 2018 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,244 @@ $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://sync?useremail=ryan.bartram@itnetx.ch # Link GitConfig file Write-Verbose "Creating link for gitconfig file" -Verbose cmd /C "mklink .gitconfig `"$ONEDRIVESYNC\Documents\.gitconfig`"" | Out-Null