82 Commits
1.3 ... 2.10

Author SHA1 Message Date
Disassembler
c935abafa3 v2.10, 2017-11-09
- Add "Enable Controlled Folder Access"
- Add "Disable Lock screen Spotlight"
- Add "Enable Storage Sense"
- Add "Show User Folder on desktop"
- Add "Disable Background application access"
- Update "Disable Start Menu suggestions" (thx @Dvorak-Stepan)
- Update bloatware removal list with Print3D and Xbox.TCUI
- Update "Disable Advertising ID" to disable also advertisement telemetry
- Merge "DisableConsumerApps" and "DisableStartSuggestions" into "DisableAppSuggestions"
- Update the way of hiding icons in This PC, so they're not hidden also in personal folders
2017-11-10 00:06:10 +01:00
Disassembler
14bf1e8477 Add additional check in "Disable Advertising ID", remove unnecessary -Force 2017-11-10 00:03:59 +01:00
Disassembler
2f8e43cc03 Add "Enable Storage Sense", closes #39 2017-11-09 23:34:39 +01:00
Disassembler
e0c9dd1df7 Add "Disable Background application access", related to #39 2017-11-09 22:33:04 +01:00
Disassembler
157bf356dc Revert to pre-1.5 way of hiding icons from This PC, kinda fixes #36.
Less reliable, but doesn't hide them in Personal folders.
2017-11-09 22:07:54 +01:00
Disassembler
d1089630c5 Add "Show User Folder on desktop", related to #39 2017-11-09 21:40:33 +01:00
Disassembler
936e0da7ec Merge DisableConsumerApps into DisableAppSuggestions, closes #35 2017-11-09 21:27:55 +01:00
Disassembler
71b8166b9e Rename DisableStartSuggestions to DisableAppSuggestions and add few more Content Delivery Manager values, related to #35 2017-11-09 21:24:02 +01:00
Disassembler
23f19fd851 Add "Disable Lock screen Spotlight", related to #35 2017-11-09 21:08:39 +01:00
Disassembler
9c957d217c Fix typo in "Show network options on lock screen" registry hive 2017-11-09 21:08:14 +01:00
Disassembler
90deb26b55 Update "Disable Advertising ID" to disable also advertisement telemetry 2017-11-09 19:35:52 +01:00
Disassembler
dac835801a Add some more bloatware for removal, closes #38 2017-11-09 19:17:09 +01:00
Disassembler
ad09c6ec67 Update "Disable Start Menu suggestions" for 1709, closes #35 (thx @Dvorak-Stepan) 2017-10-31 14:04:32 +01:00
Disassembler
11dd5c64e5 Add "Enable Controlled Folder Access", closes #33 2017-10-27 14:50:44 +02:00
Disassembler0
1f67aedeab Clarify defaults and fix typo in README 2017-10-22 17:08:02 +02:00
Disassembler
94216899a5 v2.9, 2017-10-22
- Added "DisableSharedExperiences" (thx @DaNy3LL)
- Added "Hide3DObjectsFromThisPC"
- Added "DisableAdobeFlash"
- Commented out "DisableSMB1" as 1709 (RS3) disables it implicitly
2017-10-22 14:35:03 +02:00
Disassembler
d427ae7354 Normalize preset path while passing to elevated script, resolves #27 2017-10-22 14:33:47 +02:00
Disassembler0
8b88e2deeb Add a note about multi-user envs in README 2017-09-29 08:30:29 +02:00
Disassembler
3fa306ac8f Pass command line args into elevation call instead of function args, fixes #26 2017-09-10 23:35:06 +02:00
Disassembler
61763b3c63 v2.8, 2017-09-09
- Added "EnableFileDeleteConfirm" (thx @Conder000)
- Added "HideNetworkFromLockScreen"  (thx @Conder000)
- Added "HideShutdownFromLockScreen"
- Added "DisableThumbnails"
- Added "DisableThumbsDB" (thx @johnburnett)
- Added "DisableMapUpdates" (thx @DaNy3LL)
- Added more speedup tweaks for "SetVisualFXPerformance" (thx @johnburnett)
BREAKING CHANGES - update your presets:
- Added "RequireAdmin" for on-demand elevation (allows creation of non-elevated customizations)
- Renamed "RestrictUpdateP2P" to "SetP2PUpdateLocal"
- Renamed "LowerUAC" to "SetUACLow"
- Renamed "ExplorerThisPC" to "SetExplorerThisPC"
2017-09-09 13:35:40 +02:00
Disassembler
58ff7a00d1 Improve support for spaces in paths and preset file name 2017-09-09 12:27:13 +02:00
Disassembler
727bf0d09b Merge branch 'elevate-on-demand' 2017-09-09 10:31:39 +02:00
Disassembler
70033c0a11 Rename and adjust tweak names in accordance with guidelines 2017-09-09 10:20:53 +02:00
Disassembler
ef8e0074c4 Add contribution guidelines to README 2017-09-09 10:18:00 +02:00
Disassembler
2e93e01aa1 Add "DisableMapUpdates" 2017-09-09 09:38:36 +02:00
Disassembler
9da73e107a Add "DisableNoLoginShutdown" 2017-09-09 09:37:12 +02:00
Disassembler
db90cefd5b Add "DisableThumbnails" 2017-09-09 08:12:47 +02:00
Disassembler
303eaf737f Add more speedup tweaks for "SetVisualFXPerformance" based on #24 2017-09-09 08:11:31 +02:00
Disassembler
f5d849a32d Rearrange functions after merging 2017-09-09 08:10:51 +02:00
Disassembler0
8169e550ea Merge pull request #25 from johnburnett/disable-thumbs-db
Added Thumbs.db toggles
2017-09-09 08:06:37 +02:00
Disassembler0
fcae96daa4 Merge pull request #22 from Conder000/hidenetwork
Added HideNetworkFromLockScreen function
2017-09-09 08:06:30 +02:00
Disassembler0
2f20cacfdf Merge pull request #21 from Conder000/confirmfiledelete
Added EnableFileDeleteConfirmation function
2017-09-09 08:06:21 +02:00
John Burnett
4d419b722b Added Thumbs.db toggles 2017-09-07 22:34:20 -07:00
Conder000
4085887741 Grammar fix 2017-09-01 03:20:12 +02:00
Conder000
2fd170080e Added HideNetworkFromLockScreen function
* Added HideNetworkFromLockScreen function
* GPO equivalent: Do not display network selection UI
2017-09-01 02:48:32 +02:00
Conder000
f870886df7 Added EnableFileDeleteConfirmation function
* Added EnableFileDeleteConfirmation function
* GPO equivalent: Display confirmation dialog when deleting files
2017-09-01 02:36:40 +02:00
Disassembler
4167b3b6be v2.7, 2017-08-19
- Added more bloatware for removal (thx @Conder000)
- Added "Disable fast startup" (thx @Conder000)
- Added "Enable hibernation"
- Added "Set visual effects for performance"
- Modified "Disable Update Restart" to disable automatic wake-up from sleep (thx @Conder000)
- Modified "Disable Update Restart" to remove obsolete UxOption tweak used on pre-RS1 builds
- Fix errors while applying revert functions on untweaked systems
2017-08-19 20:50:54 +02:00
Disassembler
a2e9fede9f Fix errors while applying revert functions on untweaked systems (although it's not recommended) 2017-08-19 20:50:00 +02:00
Disassembler
ed1524589b Update FAQ based on #19 2017-08-19 20:02:13 +02:00
Disassembler
8f599210e3 Add "Set visual effects for performance/appearance" 2017-08-19 19:58:34 +02:00
Disassembler
1fe7cad283 Add "Enable hibernation" 2017-08-19 19:57:34 +02:00
Disassembler
90399bdd07 Modify "Disable Update Restart" to remove obsolete UxOption tweak used on pre-RS1 builds 2017-08-19 19:55:08 +02:00
Disassembler
3bc4e67d00 Add removal of "CAF9E577.Plex" 3rd party bloatware 2017-08-19 19:53:11 +02:00
Disassembler0
b31bfe5ee8 Merge pull request #18 from Conder000/winupdate
Added AUPowerManagement
2017-08-19 15:47:31 +02:00
Disassembler0
5cfec604ef Merge pull request #17 from Conder000/faststartup
Added DisableFastStartup function
2017-08-19 15:47:20 +02:00
Disassembler0
56845c817b Merge pull request #16 from Conder000/bloat
Added third party bloatware
2017-08-19 15:47:08 +02:00
Conder000
7934a1ad75 Added AUPowerManagement
* Added registry value AUPowerManagement=0 to DisableUpdateRestart function
* GPO equivalent: Enabling Windows Update Power Management to automatically wake up the system to install scheduled updates
2017-08-16 00:27:56 +02:00
Conder000
770059d362 Added DisableFastStartup function 2017-08-14 20:44:39 +02:00
Conder000
7fa9d1a1e5 Added third party bloatware
* Added some third party bloatware (Win10 v1703)
2017-08-13 01:08:54 +02:00
Disassembler0
4332b46084 Merge pull request #13 from alirobe/patch-1
add write-hosts for third party bloat functions
2017-08-02 07:26:55 +02:00
Ali Robertson
320590c2d5 add write-hosts for third party bloat install 2017-08-02 11:33:45 +10:00
Disassembler
1136c0b390 v2.6, 2017-07-31
- Add "Disable SuperFetch" (thx M. Schilling)
- Add "Disable Indexing" (thx M. Schilling)
- Split "Uninstall Bloatware" to "Uninstall Microsoft Bloatware" and "Uninstall 3rd party Bloatware" (thx @alirobe)
- Ignore warnings while stop/starting services
- Fix few typos and add few clarifications
2017-07-31 15:50:40 +02:00
Disassembler0
d163d09a22 Merge pull request #12 from alirobe/master
split MS bloat and 3rd party bloat
2017-07-31 15:48:21 +02:00
Disassembler
e62abd0cfc Move implicit privilege elevation to function. See #11 for details. 2017-07-29 19:12:31 +02:00
Ali Robertson
12064cd8be split bloat in test suite 2017-07-29 15:56:19 +10:00
Ali Robertson
83cda95ddf split MS bloat and 3rd party bloat 2017-07-29 15:25:00 +10:00
Disassembler
a7f3ced7e4 v2.5, 2017-06-13, WinServer2016 support added
- Add "Disable obsolete SMB 1.0 protocol"
- Add "Hide Server Manager after login" (Server, disabled by default)
- Add "Disable Shutdown Event Tracker" (Server, disabled by default)
- Add "Disable password complexity and maximum age requirements" (Server, disabled by default)
- Add "Disable Ctrl+Alt+Del requirement before login" (Server, disabled by default)
- Add "Disable Internet Explorer Enhanced Security Configuration" (Server, disabled by default)
- Update multiple tweaks to work properly (or at least not throw error) on Windows Server 2016
2017-06-13 23:17:17 +02:00
Disassembler
65a27e5ca1 Slim down the execution logic and move it to the end.
Allow for proper elevation of relative preset paths via setting working directory
2017-06-13 23:07:54 +02:00
Disassembler
428b94a367 Change line ending to CRLF 2017-06-13 23:05:23 +02:00
Disassembler
c0a3de5938 v2.4, 2017-06-08
- Add "Hide taskbar People icon"
- Add "Hide recent + frequent shortcuts"
- Add "Install Hyper-V" (disabled by default)
- Replace dism commands with native cmdlets
2017-06-08 14:13:20 +02:00
Disassembler
f89ba71646 Add presets used for development and testing 2017-06-08 14:05:59 +02:00
Disassembler0
e1b8c5ca8b Merge pull request #9 from Nerothos/master
Add/remove part for people icon in taskbar
2017-06-08 14:03:42 +02:00
Nerothos
ca84acf781 Add/remove part for people icon in taskbar 2017-05-16 08:50:17 +02:00
Disassembler
a7afe5aabe v2.3, 2017-05-08
- Add "Set current network profile to private"
- Add "Set unknown networks profile to private"
- Add "Show Task Manager details"
- Add "Set Data Execution Prevention (DEP) policy to OptOut", closes #7
- Update "Disable Firewall" to use GPO, which doesn't cause Security and Maintenance Center to complain loudly.
- Update "Uninstall OneDrive" to remove unnecessary directory check.
2017-05-08 17:57:33 +02:00
Disassembler
12cd8c522d Clarify work with preset files in readme, as I see some confusion in some people's forks. 2017-05-08 13:45:41 +02:00
Disassembler
60c9237983 v2.2, 2017-04-08
- Add "Show file operations details"
- Add "Hide sync provider notifications"
- Add "Uninstall Windows Store"
- Update "Disable SmartScreen" for Edge
- Update "Disable Windows Defender" for Creators Update
- Update "Uninstall default Microsoft application" to remove even more bloatware
- Update (and rename) "Disable Xbox features" to uninstall corresponding Xbox packages
- Update default preset to not apply settings decreasing security to make the new Defender Security Center happy {Advanced users use customized presets or have their own fork anyway)
2017-04-08 11:33:49 +02:00
Disassembler
6cdfc3292d Add a FAQ about multi-user environments, addressing #5 2017-02-24 17:59:13 +01:00
Disassembler
d5bb4a6782 Convert indentation in preset list to spaces for better readability on tabsize != 4 2017-02-08 20:42:58 +01:00
Disassembler
7df79cac16 v 2.1
- Add "Disable scheduled defragmentation" (disabled by default), closes #3
- Add "Set BIOS time to UTC" (disabled by default)
- Add "Disable installation of consumer experience applications"
- Add "Disable search for app in store for unknown extensions"
- Add "Disable 'How do you want to open this file?' prompt"
- Move Autorun and Autoplay from UI tweaks to service tweaks
- Update "Enable NumLock after startup" with a horrible hack which I'm ashamed of but gets the job done
- Suppres errors while removing nonexistant keys during Photo Viewer tweak reverts
- Change a way how the WaitForKey key press is handled
2017-02-08 20:32:57 +01:00
Disassembler
f3afde4551 Change a way of reinstalling provisioned packages to avoid errors on packages which were never installed 2017-02-08 20:04:19 +01:00
Disassembler
db7356151c - Add commented restore function counterparts
- Rename EnableLockScreenWorkaround to EnableLockScreenRS1
- Fix and clarify few more strings
2017-02-08 16:50:37 +01:00
Disassembler
e12cb11a0c Suppress errors while removing nonexistent registry keys 2017-01-08 22:30:02 +01:00
Disassembler
7d2ff6c103 v 2.0
- Add "Disable Error reporting"
 - Add "Disable offering of drivers through Windows Update"
 - Update "Disable Web Search in Start Menu"
 - Update "Disable Start Menu suggestions"
 - Update "Disable Cortana"
 - Update "Disable Windows Update automatic restart"
 - Update "Disable Xbox DVR"
2017-01-08 22:24:46 +01:00
Disassembler
cda81118fd Add readme and license 2017-01-08 22:21:25 +01:00
Disassembler
480788a251 Preset processing + default preset 2017-01-08 22:10:35 +01:00
Disassembler
c55d256c3a - Convert snippets to functions
- Fix some strings and naming
2017-01-08 20:20:47 +01:00
Disassembler
83c13edca2 v1.7, 2016-08-15
- Add Disable Lock screen workaround for Anniversary Update (commented)
- Disable Xbox DVR
2016-08-15 17:21:17 +02:00
Disassembler
ea25c9950c v1.6a, 2016-08-13
- Hide error on repeated Win Defender icon removal
- Remove one more bloatware
2016-08-13 16:38:38 +02:00
Disassembler
f444709b3e v1.6, 2016-08-07
- Disable more Telemetry keys
- Remove Win Defender icon from tray (added in Redstone)
- Remove more bloatware (added in Redstone)
- Enable NumLock after boot (commented by default)
- Install Linux Subsystem (added in Redstone, commented by default)
2016-08-07 23:04:04 +02:00
Disassembler
f65ad6fbaf Cosmetic changes only
- Capitalize "Software" and "System" registry keys
 - Replace "Computer" with "This PC" (which is the proper name)
2016-06-08 21:47:48 +02:00
Disassembler
f118078813 v1.5, 2016-06-08
- Disable Start Menu suggestions
- Disable implicit administrative shares
- Disable offering of Malicious Software Removal Tool through Windows Update
- Update the way of removing Libraries icons
- Enable F8 boot menu options
2016-06-08 20:54:15 +02:00
Disassembler
f0dd889e5b v1.4, 2016-01-16
- Suppress errors during removal of already removed items
- Removal of more TH2 bloatware
2016-01-16 19:21:53 +01:00
11 changed files with 2494 additions and 565 deletions

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2017 Disassembler <disassembler@dasm.cz>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

137
README.md Normal file
View File

@@ -0,0 +1,137 @@
## Description
This is a PowerShell script for automation of routine tasks done after fresh installations of Windows 10 and Windows Server 2016. This is by no means any complete set of all existing Windows tweaks and neither is it another "antispying" type of script. It's simply a setting which I like to use and which in my opinion make the system less obtrusive.
This repository has been originally created as complementary to article <https://www.dasm.cz/clanek/jak-z-windows-10-udelat-desktopovy-system> (written in Czech) which explains the respective snippets a bit more in detail. The article was last updated on 2016-08-15 and will not be updated further. All development and discussion has been moved here.
## Usage
If you just want to run the script with default preset, simply right click on the *Win10.ps1* file, choose *Run with PowerShell*, and confirm execution policy change. Make sure your account is a member of *Administrators* group as the script attempts to run with elevated privileges.
### Advanced usage
The script consists of separate functions, each of which contains one tweak. The functions can be grouped to *presets*. Preset is simply a list of function names which should be called. If you don't supply any specific preset, the default preset defined by `$tweaks` array in the beginning of the script will be applied. Any function which is not present or is commented in a preset will not be called, thus the corresponding tweak will not be applied. If you choose to fork the script and adjust the defaults instead of creating a customized preset file, then all you have to modify is the `$tweaks` array.
To supply a customized preset, you can either pass the function names directly as parameters.
powershell.exe -NoProfile -ExecutionPolicy Bypass -File Win10.ps1 EnableFirewall EnableDefender
Or you can create a file where you write the function names (one function name per line, no commas, whitespaces allowed, comments on separate lines starting with `#`) and then pass the filename using *-preset* parameter.
Example of a preset file `mypreset.txt`:
# Security tweaks
EnableFirewall
EnableDefender
# UI tweaks
ShowKnownExtensions
ShowHiddenFiles
Command using the preset file above:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File Win10.ps1 -preset mypreset.txt
## FAQ
**Q:** Can I run the script safely?
**A:** Definitely not. You have to understand what the functions do and what will be the implications for you if you run them. Some functions lower security, hide controls or uninstall applications. **If you're not sure what the script does, do not attempt to run it!**
**Q:** Can I run the script repeatedly?
**A:** Yes! In fact the script has been written to support exactly this as it's not uncommon that big Windows Updates reset some of the settings.
**Q:** Can I run the script in multi-user environment?
**A:** Yes, to certain extent. Some tweaks (most notably UI tweaks) are set only for the user currently executing the script. As stated above, the script can be run repeatedly; therefore it's possible to run it multiple times, each time as different user. Due to the nature of authentication and privilege escalation mechanisms in Windows, the script can be successfully applied only for users belonging to *Administrators* group. Standard users will get an UAC prompt asking for admin credentials which then causes the tweaks to be applied to the given admin account instead of the original non-privileged one. To circumvent this, add the standard user to the *Administrators* group, run the script, and then remove the user from *Administrators* group again. There are a few ways how the same functionality can be achieved programmatically, but I'm not planning to include any of them as it would negatively impact code complexity and readability. If you still wish to try to use the script in multi-user environment, check [this answer in issue #29](https://github.com/Disassembler0/Win10-Initial-Setup-Script/issues/29#issuecomment-333040591) for some pointers.
**Q:** Can I run the script on Windows Server 2016?
**A:** Yes. Starting from version 2.5, Windows Server 2016 is supported. There are even few tweaks specific to Server environment. Keep in mind though, that the script is still primarily designed for Windows 10, so you have to create your own preset for Windows Server 2016.
**Q:** Can I run the script on Windows 7, 8, 8.1 or other versions of Windows?
**A:** No. Although some tweaks may work also on older versions of Windows, the script is developed only for Windows 10 and Windows Server 2016. There are no plans to add support for older versions.
**Q:** Did you test the script?
**A:** Yes. I'm testing new additions on up-to-date Home and Enterprise editions in VMs. I'm also regularly using it for all my home installations after all bigger updates.
**Q**: I've run the script and it did xxx, how can I undo it?
**A:** For every tweak, there is also a corresponding function which restores the default settings. The default is considered freshly installed Windows 10 or Windows Server 2016 with no adjustments made during or after the installation. Use the tweaks to create and run new preset. Alternatively, since most functions are just automation for actions which can be done using GUI, find appropriate control and modify it manually.
**Q:** I've run the script and it broke my computer / killed neighbor's dog / caused world war 3.
**A:** I don't care. Also, that's not a question.
**Q:** I'm using a tweak for xxx on my installation, can you add it?
**A:** Submit a PR or drop me a message. If I find the functionality simple, useful and not dependent on any 3rd party modules or executables, I might add it.
**Q:** Can I use the script or modify it for my / my company's needs?
**A:** Sure, knock yourself out. Just don't forget to include copyright notice as per MIT license requirements. I'd also suggest including a link to this GitHub repo as it's very likely that something will be changed, added or improved to keep track with future versions of Windows 10.
**Q:** Why are there repeated pieces of code throughout some functions?
**A:** So you can directly take the function block and use it elsewhere, without elaborating on any dependencies.
**Q:** For how long are you going to maintain the script?
**A:** As long as I use Windows 10.
**Q:** I really like the script. Is there any way to express gratitude and send donation?
**A:** Feel free to send donations via [PayPal donation link](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=disassembler%40dasm%2ecz&item_name=Disassembler&no_shipping=1). Any amount is appreciated, just be aware that PayPal charges [mediation fees](https://www.paypal.com/selfhelp/article/FAQ690). Also be aware that donations are completely voluntary and I'm not obliged to make any script adjustments in your favor regardless of the donated amount.
## Contribution guidelines
Following is a list of rules which I'm trying to apply in this project. The rules are not binding and I accept pull requests even if they don't adhere to them, as long as their purpose and content are clear. In rare cases, when there are too many rule violations, I might simply redo the whole functionality and reject the PR (while still crediting you). If you'd like to make my work easier, please consider adhering to the following rules too.
### Function naming
Try to give a function a meaningful name up to 25 characters long, which gives away the purpose of the function. Use verbs like `Enable`/`Disable`, `Show`/`Hide`, `Install`/`Uninstall`, `Add`/`Remove` in the beginning of the function name. In case the function doesn't fit any of these verbs, come up with another name, beginning with the verb `Set`, which indicates what the function does, eg. `SetCurrentNetworkPrivate` and `SetCurrentNetworkPublic`.
### Revert functions
Always add a function with opposite name (or equivalent) which reverts the behaviour to default. The default is considered freshly installed Windows 10 or Windows Server 2016 with no adjustments made during or after the installation. If you don't have access to either of these, create the revert function to the best of your knowledge and I will fill in the rest if necessary.
### Function similarities
Check if there isn't already a function with similar purpose as the one you are trying to add. As long as the name and objective of the existing function is unchanged, feel free to add your tweak to that function rather than creating a new one.
### Function grouping
Try to group functions thematically. There are already five major groups (privacy, services, user interface, applications and server-specific), but even within these, some tweaks may be related to each other. In such case, add a new tweak below the existing one and not to the end of the whole group.
### Default preset
Always add a reference to the tweak and its revert function in the `$tweaks` array containing the default set of tweaks. Add references to both functions on the same line (mind the quotes and commas) and always comment out the revert function. Whether to comment out also the tweak in the default preset is a matter of personal preference. The rule of thumb is that if the tweak makes the system faster, smoother, more secure and less obtrusive, it should be enabled by default. Usability has preference over performance (that's why e.g. indexing is kept enabled). Also don't forget to add the function references to all test files.
### Repeatability
Unless applied on unsupported system, all functions have to be applicable repeatedly without any errors. When you're creating a registry key, always check first if the key doesn't happen to already exist. When you're deleting registry value, always append `-ErrorAction SilentlyContinue` to prevent errors while deleting already deleted values.
### Input / output hiding
Suppress all output generated by commands and cmdlets using `| Out-Null` or `-ErrorAction SilentlyContinue` where applicable. Whenever an input is needed, use appropriate parameters to suppress the prompt and programmatically provide values for the command to run (eg. using `-Confirm:$false`). The only acceptable output is from the `Write-Host` cmdlets in the beginning of each function and from non-suppressible cmdlets like `Remove-AppxPackage`.
### Registry
Create the registry keys only if they don't exist on fresh installation if Windows 10 or Windows Server 2016. When deleting registry, delete only registry values, not the whole keys. When you're setting registry values, always use `Set-ItemProperty` instead of `New-ItemProperty`. When you're removing registry values, choose either `Set-ItemProperty` or `Remove-ItemProperty` to reinstate the same situation as it was on the clean installation. Again, if you don't know what the original state was, let me know in PR description and I will fill in the gaps. When you need to use `HKEY_USERS` registry hive, always add following snippet before the registry modification to ensure portability.
```powershell
If (!(Test-Path "HKU:")) {
New-PSDrive -Name HKU -PSProvider Registry -Root HKEY_USERS | Out-Null
}
```
### Force usage
Star Wars jokes aside, don't use `-Force` parameter unless absolutely necessary. The only permitted case is when you're creating a new registry key (not a value) and you need to ensure that all parent keys will be created as well. In such case always check first if the key doesn't already exist, otherwise you will delete all its existing values.
### Comments
Always add a simple comment above the function briefly describing what the function does, especially if it has an ambiguous name or if there is some logic hidden under the hood. If you know that the tweak doesn't work on some editions of Windows 10 or on Windows Server, state it in the comment too. Add a `Write-Host` cmdlet with the short description of action also to the first line of the function body, so the user can see what is being executed and which function is the problematic one whenever an error occurs. The comment is written in present simple tense, the `Write-Host` in present continuous with ellipsis (resp. three dots) at the end.
### Coding style
Indent using tabs, enclose all string values in double quotes (`"`) and strictly use `PascalCase` wherever possible. Put opening curly bracket on the same line as the function name or condition, but leave the closing bracket on a separate line for readability.
### Examples
**Naming example**: Consider function `EnableFastMenu`. What does it do? Which menu? How fast is *fast*? A better name might be `EnableFastMenuFlyout`, so it's a bit clearer that we're talking about the menu flyouts delays. But the counterpart function would be `DisableFastMenuFlyouts` which is not entirely true. We're not *disabling* anything, we're just making it slow again. So even better might be to name them `SetFastMenuFlyouts` and `SetSlowMenuFlyouts`. Or better yet, just add the functionality to already existing `SetVisualFXPerformance`/`SetVisualFXAppearance`. Even though the names are not 100% match, they aim to tweak similar aspects and operate within the same registry keys.
**Coding example:** The following code applies most of the rules mentioned above (naming, output hiding, repeatability, force usage, comments and coding style).
```powershell
# Enable some feature
Function EnableSomeFeature {
Write-Host "Enabling some feature..."
If (!(Test-Path "HKLM:\Some\Registry\Key")) {
New-Item -Path "HKLM:\Some\Registry\Key" -Force | Out-Null
}
Set-ItemProperty -Path "HKLM:\Some\Registry\Key" -Name "SomeValueName" -Type String -Value "SomeValue"
}
# Disable some feature
Function DisableSomeFeature {
Write-Host "Disabling some feature..."
Remove-ItemProperty -Path "HKLM:\Some\Registry\Key" -Name "SomeValueName" -ErrorAction SilentlyContinue
}
```

2453
Win10.ps1

File diff suppressed because it is too large Load Diff

3
test/Win10-ApplyAll.bat Normal file
View File

@@ -0,0 +1,3 @@
@ECHO OFF
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "..\Win10.ps1" -preset "Win10-ApplyAll.preset"

109
test/Win10-ApplyAll.preset Normal file
View File

@@ -0,0 +1,109 @@
# Windows 10 - Apply all
RequireAdmin
DisableTelemetry
DisableWiFiSense
DisableSmartScreen
DisableWebSearch
DisableAppSuggestions
DisableBackgroundApps
DisableLockScreenSpotlight
DisableLocationTracking
DisableMapUpdates
DisableFeedback
DisableAdvertisingID
DisableCortana
DisableErrorReporting
SetP2PUpdateLocal
DisableAutoLogger
DisableDiagTrack
DisableWAPPush
SetUACLow
EnableSharingMappedDrives
DisableAdminShares
# DisableSMB1
SetCurrentNetworkPrivate
SetUnknownNetworksPrivate
EnableCtrldFolderAccess
DisableFirewall
DisableDefender
DisableUpdateMSRT
DisableUpdateDriver
DisableUpdateRestart
DisableHomeGroups
DisableSharedExperiences
DisableRemoteAssistance
EnableRemoteDesktop
DisableAutoplay
DisableAutorun
EnableStorageSense
DisableDefragmentation
DisableSuperfetch
DisableIndexing
SetBIOSTimeUTC
EnableHibernation
DisableFastStartup
DisableActionCenter
DisableLockScreen
DisableLockScreenRS1
HideNetworkFromLockScreen
HideShutdownFromLockScreen
DisableStickyKeys
ShowTaskManagerDetails
ShowFileOperationsDetails
EnableFileDeleteConfirm
HideTaskbarSearchBox
HideTaskView
ShowSmallTaskbarIcons
ShowTaskbarTitles
HideTaskbarPeopleIcon
ShowTrayIcons
ShowKnownExtensions
ShowHiddenFiles
HideSyncNotifications
HideRecentShortcuts
SetExplorerThisPC
ShowThisPCOnDesktop
ShowUserFolderOnDesktop
HideDesktopFromThisPC
HideDocumentsFromThisPC
HideDownloadsFromThisPC
HideMusicFromThisPC
HidePicturesFromThisPC
HideVideosFromThisPC
Hide3DObjectsFromThisPC
SetVisualFXPerformance
DisableThumbnails
DisableThumbsDB
AddENKeyboard
EnableNumlock
DisableOneDrive
UninstallOneDrive
UninstallMsftBloat
UninstallThirdPartyBloat
UninstallWindowsStore
DisableXboxFeatures
DisableAdobeFlash
UninstallMediaPlayer
UninstallWorkFolders
InstallLinuxSubsystem
InstallHyperV
SetPhotoViewerAssociation
AddPhotoViewerOpenWith
DisableSearchAppInStore
DisableNewAppPrompt
EnableF8BootMenu
SetDEPOptOut
# HideServerManagerOnLogin
# DisableShutdownTracker
# DisablePasswordPolicy
# DisableCtrlAltDelLogin
# DisableIEEnhancedSecurity
WaitForKey
Restart

View File

@@ -0,0 +1,3 @@
@ECHO OFF
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "..\Win10.ps1" -preset "Win10-RestoreAll.preset"

View File

@@ -0,0 +1,109 @@
# Windows 10 - Restore all
RequireAdmin
EnableTelemetry
EnableWiFiSense
EnableSmartScreen
EnableWebSearch
EnableAppSuggestions
EnableBackgroundApps
EnableLockScreenSpotlight
EnableLocationTracking
EnableMapUpdates
EnableFeedback
EnableAdvertisingID
EnableCortana
EnableErrorReporting
SetP2PUpdateInternet
EnableAutoLogger
EnableDiagTrack
EnableWAPPush
SetUACHigh
DisableSharingMappedDrives
EnableAdminShares
# EnableSMB1
SetCurrentNetworkPublic
SetUnknownNetworksPublic
DisableCtrldFolderAccess
EnableFirewall
EnableDefender
EnableUpdateMSRT
EnableUpdateDriver
EnableUpdateRestart
EnableHomeGroups
EnableSharedExperiences
EnableRemoteAssistance
DisableRemoteDesktop
EnableAutoplay
EnableAutorun
DisableStorageSense
EnableDefragmentation
EnableSuperfetch
EnableIndexing
SetBIOSTimeLocal
DisableHibernation
EnableFastStartup
EnableActionCenter
EnableLockScreen
EnableLockScreenRS1
ShowNetworkOnLockScreen
ShowShutdownOnLockScreen
EnableStickyKeys
HideTaskManagerDetails
HideFileOperationsDetails
DisableFileDeleteConfirm
ShowTaskbarSearchBox
ShowTaskView
ShowLargeTaskbarIcons
HideTaskbarTitles
ShowTaskbarPeopleIcon
HideTrayIcons
HideKnownExtensions
HideHiddenFiles
ShowSyncNotifications
ShowRecentShortcuts
SetExplorerQuickAccess
HideThisPCFromDesktop
HideUserFolderFromDesktop
ShowDesktopInThisPC
ShowDocumentsInThisPC
ShowDownloadsInThisPC
ShowMusicInThisPC
ShowPicturesInThisPC
ShowVideosInThisPC
Show3DObjectsInThisPC
SetVisualFXAppearance
EnableThumbnails
EnableThumbsDB
RemoveENKeyboard
DisableNumlock
EnableOneDrive
InstallOneDrive
InstallMsftBloat
InstallThirdPartyBloat
InstallWindowsStore
EnableXboxFeatures
EnableAdobeFlash
InstallMediaPlayer
InstallWorkFolders
UninstallLinuxSubsystem
UninstallHyperV
UnsetPhotoViewerAssociation
RemovePhotoViewerOpenWith
EnableSearchAppInStore
EnableNewAppPrompt
DisableF8BootMenu
SetDEPOptIn
# ShowServerManagerOnLogin
# EnableShutdownTracker
# EnablePasswordPolicy
# EnableCtrlAltDelLogin
# EnableIEEnhancedSecurity
WaitForKey
Restart

View File

@@ -0,0 +1,3 @@
@ECHO OFF
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "..\Win10.ps1" -preset "WinServer2016-ApplyAll.preset"

View File

@@ -0,0 +1,109 @@
# Windows Server 2016 - Apply all
RequireAdmin
DisableTelemetry
DisableWiFiSense
DisableSmartScreen
DisableWebSearch
DisableAppSuggestions
DisableBackgroundApps
DisableLockScreenSpotlight
DisableLocationTracking
DisableMapUpdates
DisableFeedback
DisableAdvertisingID
DisableCortana
DisableErrorReporting
SetP2PUpdateLocal
DisableAutoLogger
DisableDiagTrack
DisableWAPPush
SetUACLow
EnableSharingMappedDrives
DisableAdminShares
DisableSMB1
SetCurrentNetworkPrivate
SetUnknownNetworksPrivate
# EnableCtrldFolderAccess
DisableFirewall
DisableDefender
DisableUpdateMSRT
DisableUpdateDriver
DisableUpdateRestart
# DisableHomeGroups
# DisableSharedExperiences
# DisableRemoteAssistance
EnableRemoteDesktop
DisableAutoplay
DisableAutorun
# EnableStorageSense
DisableDefragmentation
# DisableSuperfetch
DisableIndexing
SetBIOSTimeUTC
EnableHibernation
DisableFastStartup
DisableActionCenter
DisableLockScreen
DisableLockScreenRS1
HideNetworkFromLockScreen
HideShutdownFromLockScreen
DisableStickyKeys
ShowTaskManagerDetails
ShowFileOperationsDetails
EnableFileDeleteConfirm
HideTaskbarSearchBox
HideTaskView
ShowSmallTaskbarIcons
ShowTaskbarTitles
HideTaskbarPeopleIcon
ShowTrayIcons
ShowKnownExtensions
ShowHiddenFiles
HideSyncNotifications
HideRecentShortcuts
SetExplorerThisPC
ShowThisPCOnDesktop
ShowUserFolderOnDesktop
HideDesktopFromThisPC
HideDocumentsFromThisPC
HideDownloadsFromThisPC
HideMusicFromThisPC
HidePicturesFromThisPC
HideVideosFromThisPC
Hide3DObjectsFromThisPC
SetVisualFXPerformance
DisableThumbnails
DisableThumbsDB
AddENKeyboard
EnableNumlock
DisableOneDrive
# UninstallOneDrive
UninstallMsftBloat
UninstallThirdPartyBloat
UninstallWindowsStore
DisableXboxFeatures
DisableAdobeFlash
UninstallMediaPlayer
# UninstallWorkFolders
# InstallLinuxSubsystem
InstallHyperV
SetPhotoViewerAssociation
AddPhotoViewerOpenWith
DisableSearchAppInStore
DisableNewAppPrompt
EnableF8BootMenu
SetDEPOptOut
HideServerManagerOnLogin
DisableShutdownTracker
DisablePasswordPolicy
DisableCtrlAltDelLogin
DisableIEEnhancedSecurity
WaitForKey
Restart

View File

@@ -0,0 +1,3 @@
@ECHO OFF
powershell.exe -NoProfile -ExecutionPolicy Bypass -File "..\Win10.ps1" -preset "WinServer2016-RestoreAll.preset"

View File

@@ -0,0 +1,109 @@
# Windows Server 2016 - Restore all
RequireAdmin
EnableTelemetry
EnableWiFiSense
EnableSmartScreen
EnableWebSearch
EnableAppSuggestions
EnableBackgroundApps
EnableLockScreenSpotlight
EnableLocationTracking
EnableMapUpdates
EnableFeedback
EnableAdvertisingID
EnableCortana
EnableErrorReporting
SetP2PUpdateInternet
EnableAutoLogger
EnableDiagTrack
EnableWAPPush
SetUACHigh
DisableSharingMappedDrives
EnableAdminShares
EnableSMB1
SetCurrentNetworkPublic
SetUnknownNetworksPublic
# DisableCtrldFolderAccess
EnableFirewall
EnableDefender
EnableUpdateMSRT
EnableUpdateDriver
EnableUpdateRestart
# EnableHomeGroups
# EnableSharedExperiences
# EnableRemoteAssistance
DisableRemoteDesktop
EnableAutoplay
EnableAutorun
# DisableStorageSense
EnableDefragmentation
# EnableSuperfetch
EnableIndexing
SetBIOSTimeLocal
DisableHibernation
EnableFastStartup
EnableActionCenter
EnableLockScreen
EnableLockScreenRS1
ShowNetworkOnLockScreen
ShowShutdownOnLockScreen
EnableStickyKeys
HideTaskManagerDetails
HideFileOperationsDetails
DisableFileDeleteConfirm
ShowTaskbarSearchBox
ShowTaskView
ShowLargeTaskbarIcons
HideTaskbarTitles
ShowTaskbarPeopleIcon
HideTrayIcons
HideKnownExtensions
HideHiddenFiles
ShowSyncNotifications
ShowRecentShortcuts
SetExplorerQuickAccess
HideThisPCFromDesktop
HideUserFolderFromDesktop
ShowDesktopInThisPC
ShowDocumentsInThisPC
ShowDownloadsInThisPC
ShowMusicInThisPC
ShowPicturesInThisPC
ShowVideosInThisPC
Show3DObjectsInThisPC
SetVisualFXAppearance
EnableThumbnails
EnableThumbsDB
RemoveENKeyboard
DisableNumlock
EnableOneDrive
# InstallOneDrive
InstallMsftBloat
InstallThirdPartyBloat
InstallWindowsStore
EnableXboxFeatures
EnableAdobeFlash
InstallMediaPlayer
# InstallWorkFolders
# UninstallLinuxSubsystem
UninstallHyperV
UnsetPhotoViewerAssociation
RemovePhotoViewerOpenWith
EnableSearchAppInStore
EnableNewAppPrompt
DisableF8BootMenu
SetDEPOptIn
ShowServerManagerOnLogin
EnableShutdownTracker
EnablePasswordPolicy
EnableCtrlAltDelLogin
EnableIEEnhancedSecurity
WaitForKey
Restart