From 0d7145c7dae7afd6f0ad22edf4058e48ad2a9048 Mon Sep 17 00:00:00 2001 From: Dmitry Nefedov Date: Sun, 10 Nov 2024 13:12:35 +0300 Subject: [PATCH] Code refactoring Code refactoring Code refactoring Code refactoring --- Download_Latest_Sophia.ps1 | 1 - Download_Sophia.ps1 | 22 +- Wrapper/Config/config_Windows_10.json | 67 +- Wrapper/Config/config_Windows_10_LTSC.json | 37 +- Wrapper/Config/config_Windows_11.json | 32 - Wrapper/Config/config_Windows_11_LTSC.json | 34 - .../de-DE/tooltip_Windows_10.json | 46 +- .../de-DE/tooltip_Windows_11.json | 28 - .../en-US/tooltip_Windows_10.json | 46 +- .../en-US/tooltip_Windows_11.json | 32 +- .../ru-RU/tooltip_Windows_10.json | 46 +- .../ru-RU/tooltip_Windows_11.json | 28 - Wrapper/SophiaScriptWrapper.exe | Bin 2535424 -> 2522112 bytes .../Module/Sophia.psm1 | 636 ++++++++++------- src/Sophia_Script_for_Windows_10/Sophia.ps1 | 40 +- .../Module/Sophia.psm1 | 421 ++++++----- .../Sophia.ps1 | 24 +- .../Module/Sophia.psm1 | 445 +++++++----- .../Sophia.ps1 | 24 +- .../Module/Sophia.psm1 | 658 ++++++++++-------- .../Sophia.ps1 | 40 +- .../Module/Sophia.psm1 | 448 ++++++------ src/Sophia_Script_for_Windows_11/Sophia.ps1 | 20 +- .../Module/Sophia.psm1 | 397 +++++------ .../Sophia.ps1 | 20 +- .../Module/Sophia.psm1 | 444 ++++++------ .../Sophia.ps1 | 20 +- 27 files changed, 2054 insertions(+), 2002 deletions(-) diff --git a/Download_Latest_Sophia.ps1 b/Download_Latest_Sophia.ps1 index 188649461..991c85325 100644 --- a/Download_Latest_Sophia.ps1 +++ b/Download_Latest_Sophia.ps1 @@ -111,7 +111,6 @@ switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) } } } -Invoke-WebRequest @Parameters if (-not (Test-Path -Path "$DownloadsFolder\SophiaScriptTemp")) { diff --git a/Download_Sophia.ps1 b/Download_Sophia.ps1 index a97455867..c381fc4a6 100644 --- a/Download_Sophia.ps1 +++ b/Download_Sophia.ps1 @@ -32,6 +32,7 @@ $Parameters = @{ Uri = "https://raw.githubusercontent.com/farag2/Sophia-Script-for-Windows/master/sophia_script_versions.json" UseBasicParsing = $true } +$JSONVersions = Invoke-WebRequest @Parameters switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) { @@ -40,13 +41,14 @@ switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) # Check for Windows 10 LTSC 2019 if ((Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ProductName) -match "LTSC 2019") { - $LatestRelease = (Invoke-RestMethod @Parameters).Sophia_Script_Windows_10_LTSC2019 + $LatestRelease = $JSONVersions.Sophia_Script_Windows_10_LTSC2019 $Parameters = @{ Uri = "https://github.com/farag2/Sophia-Script-for-Windows/releases/download/$LatestGitHubRelease/Sophia.Script.for.Windows.10.LTSC.2019.v$LatestRelease.zip" OutFile = "$DownloadsFolder\Sophia.Script.zip" UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters $Version = "Windows_10_LTSC2019" } @@ -72,13 +74,15 @@ switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) # Check for Windows 10 LTSC 2021 if ((Get-ItemPropertyValue -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ProductName) -match "LTSC 2021") { - $LatestRelease = (Invoke-RestMethod @Parameters).Sophia_Script_Windows_10_LTSC2021 + $LatestRelease = $JSONVersions.Sophia_Script_Windows_10_LTSC2021 $Parameters = @{ Uri = "https://github.com/farag2/Sophia-Script-for-Windows/releases/download/$LatestGitHubRelease/Sophia.Script.for.Windows.10.LTSC.2021.v$LatestRelease.zip" OutFile = "$DownloadsFolder\Sophia.Script.zip" UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters + $Version = "Windows_10_LTSC2021" } else @@ -102,13 +106,14 @@ switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) { if ($Host.Version.Major -eq 5) { - $LatestRelease = (Invoke-RestMethod @Parameters).Sophia_Script_Windows_10_PowerShell_5_1 + $LatestRelease = $JSONVersions.Sophia_Script_Windows_10_PowerShell_5_1 $Parameters = @{ Uri = "https://github.com/farag2/Sophia-Script-for-Windows/releases/download/$LatestGitHubRelease/Sophia.Script.for.Windows.10.v$LatestRelease.zip" OutFile = "$DownloadsFolder\Sophia.Script.zip" UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters $Version = "Windows_10_PowerShell_5.1" } @@ -121,6 +126,7 @@ switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters $Version = "Windows_10_PowerShell_7" } @@ -132,44 +138,46 @@ switch ((Get-CimInstance -ClassName Win32_OperatingSystem).BuildNumber) { if ($Host.Version.Major -eq 5) { - $LatestRelease = (Invoke-RestMethod @Parameters).Sophia_Script_Windows_11_PowerShell_5_1 + $LatestRelease = $JSONVersions.Sophia_Script_Windows_11_PowerShell_5_1 $Parameters = @{ Uri = "https://github.com/farag2/Sophia-Script-for-Windows/releases/download/$LatestGitHubRelease/Sophia.Script.for.Windows.11.v$LatestRelease.zip" OutFile = "$DownloadsFolder\Sophia.Script.zip" UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters $Version = "Windows_11_PowerShell_5.1" } else { - $LatestRelease = (Invoke-RestMethod @Parameters).Sophia_Script_Windows_11_PowerShell_7 + $LatestRelease = $JSONVersions.Sophia_Script_Windows_11_PowerShell_7 $Parameters = @{ Uri = "https://github.com/farag2/Sophia-Script-for-Windows/releases/download/$LatestGitHubRelease/Sophia.Script.for.Windows.11.PowerShell.7.v$LatestRelease.zip" OutFile = "$DownloadsFolder\Sophia.Script.zip" UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters $Version = "Windows_11_PowerShell_7" } } else { - $LatestRelease = (Invoke-RestMethod @Parameters).Sophia_Script_Windows_11_LTSC2024 + $LatestRelease = $JSONVersions.Sophia_Script_Windows_11_LTSC2024 $Parameters = @{ Uri = "https://github.com/farag2/Sophia-Script-for-Windows/releases/download/$LatestGitHubRelease/Sophia.Script.for.Windows.11.LTSC.2024.v$LatestRelease.zip" OutFile = "$DownloadsFolder\Sophia.Script.zip" UseBasicParsing = $true Verbose = $true } + Invoke-WebRequest @Parameters $Version = "Windows_11_LTSC2024" } } } -Invoke-WebRequest @Parameters if (-not (Test-Path -Path "$DownloadsFolder\Sophia.Script.zip")) { diff --git a/Wrapper/Config/config_Windows_10.json b/Wrapper/Config/config_Windows_10.json index 754c07409..dd17a86f7 100644 --- a/Wrapper/Config/config_Windows_10.json +++ b/Wrapper/Config/config_Windows_10.json @@ -572,22 +572,6 @@ "Preset": "Zero", "WindowsDefault": "One" }, - { - "Region": "UI & Personalization", - "Control": "cmb", - "Required": "false", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide" - }, - "One": { - "Tag": "Show" - } - }, - "Preset": "Zero", - "WindowsDefault": "One" - }, { "Region": "UI & Personalization", "Control": "cmb", @@ -700,6 +684,25 @@ "Preset": "Zero", "WindowsDefault": "One" }, + { + "Region": "UI & Personalization", + "Control": "cmb", + "Required": "false", + "Function": "TaskbarCombine", + "Arg": { + "Zero": { + "Tag": "Always" + }, + "One": { + "Tag": "Full" + }, + "Two": { + "Tag": "Never" + } + }, + "Preset": "Zero", + "WindowsDefault": "Zero" + }, { "Region": "UI & Personalization", "Control": "chk", @@ -1106,22 +1109,6 @@ "Preset": "Zero", "WindowsDefault": "One" }, - { - "Region": "System", - "Control": "cmb", - "Required": "false", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable" - }, - "One": { - "Tag": "Disable" - } - }, - "Preset": "Zero", - "WindowsDefault": "One" - }, { "Region": "System", "Control": "cmb", @@ -2228,6 +2215,22 @@ "Preset": "", "WindowsDefault": "One" }, + { + "Region": "Context menu", + "Control": "cmb", + "Required": "false", + "Function": "ImagesEditContext", + "Arg": { + "Zero": { + "Tag": "Hide" + }, + "One": { + "Tag": "Show" + } + }, + "Preset": "Zero", + "WindowsDefault": "One" + }, { "Region": "Context menu", "Control": "cmb", diff --git a/Wrapper/Config/config_Windows_10_LTSC.json b/Wrapper/Config/config_Windows_10_LTSC.json index 517875d21..30cb23951 100644 --- a/Wrapper/Config/config_Windows_10_LTSC.json +++ b/Wrapper/Config/config_Windows_10_LTSC.json @@ -608,6 +608,25 @@ "LTSC2019": "true", "LTSC2021": "true" }, + { + "Region": "UI & Personalization", + "Control": "cmb", + "Required": "false", + "Function": "TaskbarCombine", + "Arg": { + "Zero": { + "Tag": "Always" + }, + "One": { + "Tag": "Full" + }, + "Two": { + "Tag": "Never" + } + }, + "Preset": "Zero", + "WindowsDefault": "Zero" + }, { "Region": "UI & Personalization", "Control": "cmb", @@ -986,24 +1005,6 @@ "LTSC2019": "true", "LTSC2021": "true" }, - { - "Region": "System", - "Control": "cmb", - "Required": "false", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable" - }, - "One": { - "Tag": "Disable" - } - }, - "Preset": "Zero", - "WindowsDefault": "One", - "LTSC2019": "true", - "LTSC2021": "true" - }, { "Region": "System", "Control": "cmb", diff --git a/Wrapper/Config/config_Windows_11.json b/Wrapper/Config/config_Windows_11.json index 0f0205686..ecb6c78c9 100644 --- a/Wrapper/Config/config_Windows_11.json +++ b/Wrapper/Config/config_Windows_11.json @@ -591,22 +591,6 @@ "Preset": "Zero", "WindowsDefault": "One" }, - { - "Region": "UI & Personalization", - "Control": "cmb", - "Required": "false", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide" - }, - "One": { - "Tag": "Show" - } - }, - "Preset": "Zero", - "WindowsDefault": "One" - }, { "Region": "UI & Personalization", "Control": "cmb", @@ -1029,22 +1013,6 @@ "Preset": "Zero", "WindowsDefault": "One" }, - { - "Region": "System", - "Control": "cmb", - "Required": "false", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable" - }, - "One": { - "Tag": "Disable" - } - }, - "Preset": "Zero", - "WindowsDefault": "One" - }, { "Region": "System", "Control": "cmb", diff --git a/Wrapper/Config/config_Windows_11_LTSC.json b/Wrapper/Config/config_Windows_11_LTSC.json index 92dd40ed0..a852e19e3 100644 --- a/Wrapper/Config/config_Windows_11_LTSC.json +++ b/Wrapper/Config/config_Windows_11_LTSC.json @@ -611,23 +611,6 @@ "WindowsDefault": "One", "LTSC2024": "true" }, - { - "Region": "UI & Personalization", - "Control": "cmb", - "Required": "false", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide" - }, - "One": { - "Tag": "Show" - } - }, - "Preset": "Zero", - "WindowsDefault": "One", - "LTSC2024": "true" - }, { "Region": "UI & Personalization", "Control": "cmb", @@ -1045,23 +1028,6 @@ "WindowsDefault": "One", "LTSC2024": "true" }, - { - "Region": "System", - "Control": "cmb", - "Required": "false", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable" - }, - "One": { - "Tag": "Disable" - } - }, - "Preset": "Zero", - "WindowsDefault": "One", - "LTSC2024": "true" - }, { "Region": "System", "Control": "cmb", diff --git a/Wrapper/Localizations/de-DE/tooltip_Windows_10.json b/Wrapper/Localizations/de-DE/tooltip_Windows_10.json index 0b9a90e29..3951d4ddb 100644 --- a/Wrapper/Localizations/de-DE/tooltip_Windows_10.json +++ b/Wrapper/Localizations/de-DE/tooltip_Windows_10.json @@ -499,20 +499,6 @@ } } }, - { - "Region": "UI & Personalization", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide", - "ToolTip": "Ausblenden der Schaltfläche Copilot in der Taskleiste." - }, - "One": { - "Tag": "Show", - "ToolTip": "Zeigen Sie die Schaltfläche Copilot in der Taskleiste an (Standardeinstellung)." - } - } - }, { "Region": "UI & Personalization", "Function": "TaskViewButton", @@ -611,6 +597,24 @@ } } }, + { + "Region": "UI & Personalization", + "Function": "TaskbarCombine", + "Arg": { + "Zero": { + "Tag": "Always", + "ToolTip": "Kombinieren Sie Schaltflächen in der Taskleiste und blenden Sie Beschriftungen immer aus (Standardeinstellung)." + }, + "One": { + "Tag": "Full", + "ToolTip": "Taskleistenschaltflächen zusammenfassen und Beschriftungen ausblenden, wenn die Taskleiste voll ist.." + }, + "Two": { + "Tag": "Never", + "ToolTip": "Kombinieren Sie die Schaltflächen der Taskleiste und blenden Sie die Beschriftungen nicht aus.." + } + } + }, { "Region": "UI & Personalization", "Function": "UnpinTaskbarShortcuts -Shortcuts", @@ -970,20 +974,6 @@ } } }, - { - "Region": "System", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable", - "ToolTip": "Aktiviert den Zugriff auf zugeordnete Laufwerke von einer Anwendung, die mit erweiterten Berechtigungen und aktiviertem Admin-Genehmigungsmodus ausgeführt wird." - }, - "One": { - "Tag": "Disable", - "ToolTip": "Deaktiviert den Zugriff auf zugeordnete Laufwerke von Anwendungen, die mit erweiterten Berechtigungen und aktiviertem Admin-Genehmigungsmodus ausgeführt werden (Standardeinstellung)." - } - } - }, { "Region": "System", "Function": "DeliveryOptimization", diff --git a/Wrapper/Localizations/de-DE/tooltip_Windows_11.json b/Wrapper/Localizations/de-DE/tooltip_Windows_11.json index 33b8455ce..b280affcf 100644 --- a/Wrapper/Localizations/de-DE/tooltip_Windows_11.json +++ b/Wrapper/Localizations/de-DE/tooltip_Windows_11.json @@ -517,20 +517,6 @@ } } }, - { - "Region": "UI & Personalization", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide", - "ToolTip": "Ausblenden der Schaltfläche Copilot in der Taskleiste." - }, - "One": { - "Tag": "Show", - "ToolTip": "Zeigen Sie die Schaltfläche Copilot in der Taskleiste an (Standardeinstellung)." - } - } - }, { "Region": "UI & Personalization", "Function": "TaskViewButton", @@ -918,20 +904,6 @@ } } }, - { - "Region": "System", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable", - "ToolTip": "Aktiviert den Zugriff auf zugeordnete Laufwerke von einer Anwendung, die mit erweiterten Berechtigungen und aktiviertem Admin-Genehmigungsmodus ausgeführt wird." - }, - "One": { - "Tag": "Disable", - "ToolTip": "Deaktiviert den Zugriff auf zugeordnete Laufwerke von Anwendungen, die mit erweiterten Berechtigungen und aktiviertem Admin-Genehmigungsmodus ausgeführt werden (Standardeinstellung)." - } - } - }, { "Region": "System", "Function": "DeliveryOptimization", diff --git a/Wrapper/Localizations/en-US/tooltip_Windows_10.json b/Wrapper/Localizations/en-US/tooltip_Windows_10.json index 07e9b2dc5..200324fa3 100644 --- a/Wrapper/Localizations/en-US/tooltip_Windows_10.json +++ b/Wrapper/Localizations/en-US/tooltip_Windows_10.json @@ -347,11 +347,11 @@ "Arg": { "Zero": { "Tag": "Expanded", - "ToolTip": "Expand the File Explorer ribbon." + "ToolTip": "Expand File Explorer ribbon." }, "One": { "Tag": "Minimized", - "ToolTip": "Minimize the File Explorer ribbon (default value)." + "ToolTip": "Minimize File Explorer ribbon (default value)." } } }, @@ -499,20 +499,6 @@ } } }, - { - "Region": "UI & Personalization", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide", - "ToolTip": "Hide Copilot button on the taskbar." - }, - "One": { - "Tag": "Show", - "ToolTip": "Show Copilot button on the taskbar (default value)." - } - } - }, { "Region": "UI & Personalization", "Function": "TaskViewButton", @@ -611,6 +597,20 @@ } } }, + { + "Region": "UI & Personalization", + "Function": "SecondsInSystemClock", + "Arg": { + "Zero": { + "Tag": "Show", + "ToolTip": "Show seconds on the taskbar clock." + }, + "One": { + "Tag": "Hide", + "ToolTip": "Hide seconds on the taskbar clock (default value)." + } + } + }, { "Region": "UI & Personalization", "Function": "UnpinTaskbarShortcuts -Shortcuts", @@ -970,20 +970,6 @@ } } }, - { - "Region": "System", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable", - "ToolTip": "Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled." - }, - "One": { - "Tag": "Disable", - "ToolTip": "Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value)." - } - } - }, { "Region": "System", "Function": "DeliveryOptimization", diff --git a/Wrapper/Localizations/en-US/tooltip_Windows_11.json b/Wrapper/Localizations/en-US/tooltip_Windows_11.json index 87defb701..b88461fd6 100644 --- a/Wrapper/Localizations/en-US/tooltip_Windows_11.json +++ b/Wrapper/Localizations/en-US/tooltip_Windows_11.json @@ -361,11 +361,11 @@ "Arg": { "Zero": { "Tag": "Disable", - "ToolTip": "Disable the File Explorer compact mode (default value)." + "ToolTip": "Disable File Explorer compact mode (default value)." }, "One": { "Tag": "Enable", - "ToolTip": "Enable the File Explorer compact mode." + "ToolTip": "Enable File Explorer compact mode." } } }, @@ -517,20 +517,6 @@ } } }, - { - "Region": "UI & Personalization", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide", - "ToolTip": "Hide Copilot button on the taskbar." - }, - "One": { - "Tag": "Show", - "ToolTip": "Show Copilot button on the taskbar (default value)." - } - } - }, { "Region": "UI & Personalization", "Function": "TaskViewButton", @@ -918,20 +904,6 @@ } } }, - { - "Region": "System", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable", - "ToolTip": "Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled." - }, - "One": { - "Tag": "Disable", - "ToolTip": "Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value)." - } - } - }, { "Region": "System", "Function": "DeliveryOptimization", diff --git a/Wrapper/Localizations/ru-RU/tooltip_Windows_10.json b/Wrapper/Localizations/ru-RU/tooltip_Windows_10.json index 3d5b2f865..7f63b9f7e 100644 --- a/Wrapper/Localizations/ru-RU/tooltip_Windows_10.json +++ b/Wrapper/Localizations/ru-RU/tooltip_Windows_10.json @@ -499,20 +499,6 @@ } } }, - { - "Region": "UI & Personalization", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide", - "ToolTip": "Скрыть кнопку Copilot с панели задач." - }, - "One": { - "Tag": "Show", - "ToolTip": "Отобразить кнопку Copilot на панели задач (значение по умолчанию)." - } - } - }, { "Region": "UI & Personalization", "Function": "TaskViewButton", @@ -611,6 +597,24 @@ } } }, + { + "Region": "UI & Personalization", + "Function": "TaskbarCombine", + "Arg": { + "Zero": { + "Tag": "Always", + "ToolTip": "Объединить кнопки панели задач и всегда скрывать метки (значение по умолчанию)." + }, + "One": { + "Tag": "Full", + "ToolTip": "Объединить кнопки панели задач и скрывать метки при переполнении панели задач." + }, + "Two": { + "Tag": "Never", + "ToolTip": "Объединить кнопки панели задач и никогда не скрывать метки." + } + } + }, { "Region": "UI & Personalization", "Function": "UnpinTaskbarShortcuts -Shortcuts", @@ -970,20 +974,6 @@ } } }, - { - "Region": "System", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable", - "ToolTip": "Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами." - }, - "One": { - "Tag": "Disable", - "ToolTip": "Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию)." - } - } - }, { "Region": "System", "Function": "DeliveryOptimization", diff --git a/Wrapper/Localizations/ru-RU/tooltip_Windows_11.json b/Wrapper/Localizations/ru-RU/tooltip_Windows_11.json index cfcbd42a3..2a5fe21a2 100644 --- a/Wrapper/Localizations/ru-RU/tooltip_Windows_11.json +++ b/Wrapper/Localizations/ru-RU/tooltip_Windows_11.json @@ -517,20 +517,6 @@ } } }, - { - "Region": "UI & Personalization", - "Function": "CopilotButton", - "Arg": { - "Zero": { - "Tag": "Hide", - "ToolTip": "Скрыть кнопку Copilot с панели задач." - }, - "One": { - "Tag": "Show", - "ToolTip": "Отобразить кнопку Copilot на панели задач (значение по умолчанию)." - } - } - }, { "Region": "UI & Personalization", "Function": "TaskViewButton", @@ -918,20 +904,6 @@ } } }, - { - "Region": "System", - "Function": "MappedDrivesAppElevatedAccess", - "Arg": { - "Zero": { - "Tag": "Enable", - "ToolTip": "Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами." - }, - "One": { - "Tag": "Disable", - "ToolTip": "Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию)." - } - } - }, { "Region": "System", "Function": "DeliveryOptimization", diff --git a/Wrapper/SophiaScriptWrapper.exe b/Wrapper/SophiaScriptWrapper.exe index 7f92171df1c57a6e3359809d507288e148cd15a3..0baf00682efac248206651fe58f65e7de60ca7c7 100644 GIT binary patch delta 195084 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%0AKZitx7BB5V_E;}zl8+z7uG zQyah{RQeSQ<145D>{;oTEQ~Lq08I+I`6*NYdVT6{oyD_g_I_vp zbW-{eyZQ(!0G*WXVGZtq3P3NV9|-ko(4BHbZlcVa9l43J�Kq?==R@ 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 k>Gld)=BLX`Tjf#ieNCI=qP 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

ZJLGl5N)X`8MMI_{!s5N|x-? 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 diff --git a/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 index 442eacf76..8869eef19 100644 --- a/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 @@ -1265,7 +1265,7 @@ function DiagnosticDataLevel { "Minimal" { - if (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")}) + if (([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Enterprise") -or ([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Education")) { # Security level New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force @@ -1332,8 +1332,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1341,11 +1340,8 @@ function ErrorReporting { "Disable" { - if ((Get-WindowsEdition -Online).Edition -notmatch "Core") - { - Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask - New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force - } + Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask + New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force Get-Service -Name WerSvc | Stop-Service -Force Get-Service -Name WerSvc | Set-Service -StartupType Disabled @@ -1413,11 +1409,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1886,22 +1882,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -2161,22 +2154,19 @@ function WhatsNewInWindows $Enable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } } @@ -2747,6 +2737,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2798,22 +2790,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2821,13 +2810,13 @@ function FileTransferDialog <# .SYNOPSIS - The File Explorer ribbon + File Explorer ribbon .PARAMETER Expanded - Expand the File Explorer ribbon + Expand File Explorer ribbon .PARAMETER Minimized - Minimize the File Explorer ribbon + Minimize File Explorer ribbon .EXAMPLE FileExplorerRibbon -Expanded @@ -2857,6 +2846,11 @@ function FileExplorerRibbon $Minimized ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Expanded" @@ -2916,6 +2910,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -3204,6 +3203,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3319,6 +3323,23 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + + # Checking whether small taskbar buttons enabled + # Due to "Set-StrictMode -Version Latest" we have to use GetValue() + $TaskbarSmallIcons = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons", $null)) + if ($TaskbarSmallIcons -eq 1) + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3374,12 +3395,30 @@ function SearchHighlights $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds\DSB -Name ShowDynamicContent -PropertyType DWord -Value 0 -Force - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\SearchSettings -Name IsDynamicSearchBoxEnabled -PropertyType DWord -Value 0 -Force + # Checking whether "Web search in Windows Search" was disabled. It also disable Search Highlights automatically + # Due to "Set-StrictMode -Version Latest" we have to use GetValue() + $DisableSearchBoxSuggestions = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer", "DisableSearchBoxSuggestions", $null)) + if ($DisableSearchBoxSuggestions -eq 1) + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } + else + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds\DSB -Name ShowDynamicContent -PropertyType DWord -Value 0 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\SearchSettings -Name IsDynamicSearchBoxEnabled -PropertyType DWord -Value 0 -Force + } } "Show" { @@ -3427,6 +3466,10 @@ function CortanaButton $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name AllowCortana -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name AllowCortana -Type CLEAR + if (-not (Get-AppxPackage -Name Microsoft.549981C3F5F10)) { Write-Information -MessageData "" -InformationAction Continue @@ -3449,57 +3492,6 @@ function CortanaButton } } -<# - .SYNOPSIS - Copilot button on the taskbar - - .PARAMETER Hide - Hide Copilot button on the taskbar - - .PARAMETER Show - Show Copilot button on the taskbar - - .EXAMPLE - CopilotButton -Hide - - .EXAMPLE - CopilotButton -Show - - .NOTES - Current user -#> -function CopilotButton -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Hide" - )] - [switch] - $Hide, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Show" - )] - [switch] - $Show - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Hide" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 0 -Force - } - "Show" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 1 -Force - } - } -} - <# .SYNOPSIS Task view button on the taskbar @@ -3592,7 +3584,11 @@ function NewsInterests $Enable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -Name EnableFeeds -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\NewsAndInterests\AllowNewsAndInterests" -Name value -Force -ErrorAction Ignore + + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -3601,10 +3597,6 @@ function NewsInterests return } - # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -Name EnableFeeds -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\NewsAndInterests\AllowNewsAndInterests" -Name value -Force -ErrorAction Ignore - # Due to "Set-StrictMode -Version Latest" we have to use GetValue() $MachineId = [Microsoft.Win32.Registry]::GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient", "MachineId", $null) if (-not $MachineId) @@ -3651,9 +3643,9 @@ public static extern int HashData(byte[] pbData, int cbData, byte[] piet, int ou # Get value to save in EnShellFeedsTaskbarViewMode key $DWordData = [System.BitConverter]::ToUInt32($bytesOut,0) - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 2 -Force} + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 2 -Force} # We need to use here an approach with "-Command & {}" as there's a variable inside - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" } "Enable" { @@ -3669,9 +3661,9 @@ public static extern int HashData(byte[] pbData, int cbData, byte[] piet, int ou # Get value to save in EnShellFeedsTaskbarViewMode key $DWordData = [System.BitConverter]::ToUInt32($bytesOut,0) - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 0 -Force} + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 0 -Force} # We need to use here an approach with "-Command & {}" as there's a variable inside - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" } } @@ -3716,6 +3708,11 @@ function PeopleTaskbar $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3775,6 +3772,11 @@ function MeetNow $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3832,6 +3834,10 @@ function WindowsInkWorkspace $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\WindowsInkWorkspace -Name AllowWindowsInkWorkspace -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3883,6 +3889,11 @@ function NotificationAreaIcons $Hide ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Show" @@ -3947,6 +3958,79 @@ function SecondsInSystemClock } } +<# + .SYNOPSIS + Combine taskbar buttons and hide labels + + .PARAMETER Always + Combine taskbar buttons and always hide labels + + .PARAMETER Full + Combine taskbar buttons and hide labels when taskbar is full + + .PARAMETER Never + Combine taskbar buttons and never hide labels + + .EXAMPLE + TaskbarCombine -Always + + .EXAMPLE + TaskbarCombine -Full + + .EXAMPLE + TaskbarCombine -Never + + .NOTES + Current user +#> +function TaskbarCombine +{ + param + ( + [Parameter( + Mandatory = $true, + ParameterSetName = "Always" + )] + [switch] + $Always, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Full" + )] + [switch] + $Full, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Never" + )] + [switch] + $Never + ) + + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + + switch ($PSCmdlet.ParameterSetName) + { + "Always" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force + } + "Full" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force + } + "Never" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force + } + } +} + <# .SYNOPSIS Unpin shortcuts from the taskbar @@ -4069,32 +4153,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -4250,10 +4331,13 @@ function NewAppInstalledNotification New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type DWORD -Value 1 } "Show" { Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type CLEAR } } } @@ -4296,6 +4380,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4472,6 +4560,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4629,6 +4719,11 @@ function AeroShaking $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Enable" @@ -4729,7 +4824,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -4820,7 +4915,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -5035,7 +5130,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -5205,12 +5300,12 @@ public static bool MarkFileDelete (string sourcefile) # Getting the OneDrive folder path and replacing quotes if exist $OneDriveFolder = (Split-Path -Path (Split-Path -Path $OneDriveSetup[0] -Parent)) -replace '"', "" - # Do not restart the File Explorer process automatically if it stops in order to unload libraries + # Do not restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 0 -Force # Kill all explorer instances in case "launch folder windows in a separate process" enabled Get-Process -Name explorer | Stop-Process -Force Start-Sleep -Seconds 3 - # Restart the File Explorer process automatically if it stops in order to unload libraries + # Restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 1 -Force # Attempt to unregister FileSyncShell64.dll and remove @@ -5374,22 +5469,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -5718,57 +5810,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -6390,19 +6431,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -6454,18 +6505,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -9074,7 +9113,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -9953,6 +9992,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9978,6 +10018,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -10071,6 +10112,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -10128,6 +10170,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -10263,7 +10306,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -10272,6 +10315,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -10280,44 +10328,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -10332,6 +10368,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -10647,19 +10688,25 @@ function RecentlyAddedApps $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Hide" { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer)) + if (-not (Test-Path -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer)) { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force + New-Item -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Force } - New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type DWORD -Value 1 } "Show" { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type CLEAR } } } @@ -10702,6 +10749,13 @@ function AppSuggestions $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Force -ErrorAction Ignore + if (([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Enterprise") -or ([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Education")) + { + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Type CLEAR + } + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -11671,22 +11725,19 @@ function CortanaAutostart return } + if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) + { + New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 1 -Force } "Enable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 2 -Force } } @@ -12059,14 +12110,18 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -12494,14 +12549,18 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -12808,14 +12867,18 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -13199,7 +13262,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -13731,7 +13794,8 @@ function WindowsSandbox $Enable ) - if (-not (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Professional") -or ($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")})) + $WINDOWS_LONG = [WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") + if (($WINDOWS_LONG -notmatch "Pro") -and ($WINDOWS_LONG -notmatch "Enterprise") -and ($WINDOWS_LONG -notmatch "Education")) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -14271,6 +14335,66 @@ function EditWithPaint3DContext } } +<# + .SYNOPSIS + The "Edit" item in the images context menu + + .PARAMETER Hide + Hide the "Edit" item from the images context menu + + .PARAMETER Show + Show the "Edit" item in the images context menu + + .EXAMPLE + ImagesEditContext -Hide + + .EXAMPLE + ImagesEditContext -Show + + .NOTES + Current user +#> +function ImagesEditContext +{ + param + ( + [Parameter( + Mandatory = $true, + ParameterSetName = "Hide" + )] + [switch] + $Hide, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Show" + )] + [switch] + $Show + ) + + if ((Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*").State -ne "Installed") + { + return + } + + switch ($PSCmdlet.ParameterSetName) + { + "Hide" + { + if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit)) + { + New-Item -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Force + } + New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force + } + "Show" + { + Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Name ProgrammaticAccessOnly -Force -ErrorAction Ignore + } + } +} + <# .SYNOPSIS The "Print" item in the .bat and .cmd context menu @@ -14488,24 +14612,12 @@ function BitmapImageNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -14579,24 +14691,12 @@ function RichTextDocumentNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.WordPad*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -14754,7 +14854,7 @@ function UseStoreOpenWith ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Type CLEAR switch ($PSCmdlet.ParameterSetName) @@ -15080,11 +15180,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_10/Sophia.ps1 b/src/Sophia_Script_for_Windows_10/Sophia.ps1 index d3ae53c2d..aa35ae09e 100644 --- a/src/Sophia_Script_for_Windows_10/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_10/Sophia.ps1 @@ -350,11 +350,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Expand the File Explorer ribbon +# Expand File Explorer ribbon # Развернуть ленту проводника FileExplorerRibbon -Expanded -# Minimize the File Explorer ribbon (default value) +# Minimize File Explorer ribbon (default value) # Свернуть ленту проводника (значение по умолчанию) # FileExplorerRibbon -Minimized @@ -442,14 +442,6 @@ CortanaButton -Hide # Показать кнопку Кортаны на панели задач (значение по умолчанию) # CortanaButton -Show -# Hide Copilot button on the taskbar -# Скрыть кнопку Copilot с панели задач -CopilotButton -Hide - -# Show Copilot button on the taskbar (default value) -# Отобразить кнопку Copilot на панели задач (значение по умолчанию) -# CopilotButton -Show - # Hide the Task View button on the taskbar # Скрыть кнопку Просмотра задач TaskViewButton -Hide @@ -506,6 +498,18 @@ SecondsInSystemClock -Show # Скрыть секунды в системных часах на панели задач (значение по умолчанию) # SecondsInSystemClock -Hide +# Combine taskbar buttons and always hide labels (default value) +# Объединить кнопки панели задач и всегда скрывать метки (значение по умолчанию) +TaskbarCombine -Always + +# Combine taskbar buttons and hide labels when taskbar is full +# Объединить кнопки панели задач и скрывать метки при переполнении панели задач +# TaskbarCombine -Full + +# Combine taskbar buttons and never hide labels +# Объединить кнопки панели задач и никогда не скрывать метки +# TaskbarCombine -Never + # Unpin the "Microsoft Edge", "Microsoft Store", or "Mail" shortcuts from the taskbar # Открепить ярлыки "Microsoft Edge", "Microsoft Store" или "Почта" от панели задач UnpinTaskbarShortcuts -Shortcuts Edge, Store, Mail @@ -704,14 +708,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable @@ -1376,6 +1372,14 @@ EditWithPaint3DContext -Hide # Отобразить пункт "Изменить с помощью Paint 3D" в контекстном меню медиа-файлов (значение по умолчанию) # EditWithPaint3DContext -Show +# Hide the "Edit" item from the images context menu +# Скрыть пункт "Изменить" из контекстного меню изображений +ImagesEditContext -Hide + +# Show the "Edit" item in images context menu (default value) +# Отобразить пункт "Изменить" в контекстном меню изображений (значение по умолчанию) +# ImagesEditContext -Show + # Hide the "Print" item from the .bat and .cmd context menu # Скрыть пункт "Печать" из контекстного меню .bat и .cmd файлов PrintCMDContext -Hide diff --git a/src/Sophia_Script_for_Windows_10_LTSC_2019/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_10_LTSC_2019/Module/Sophia.psm1 index e8d2704df..31657fa3b 100644 --- a/src/Sophia_Script_for_Windows_10_LTSC_2019/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_10_LTSC_2019/Module/Sophia.psm1 @@ -686,6 +686,7 @@ public extern static string BrandingFormatString(string sFormat); exit } + # Detect Windows build version switch ((Get-CimInstance -ClassName CIM_OperatingSystem).BuildNumber) { {$_ -ne 17763} @@ -1274,8 +1275,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1352,11 +1352,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1825,22 +1825,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -2196,6 +2193,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2247,22 +2246,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2270,13 +2266,13 @@ function FileTransferDialog <# .SYNOPSIS - The File Explorer ribbon + File Explorer ribbon .PARAMETER Expanded - Expand the File Explorer ribbon + Expand File Explorer ribbon .PARAMETER Minimized - Minimize the File Explorer ribbon + Minimize File Explorer ribbon .EXAMPLE FileExplorerRibbon -Expanded @@ -2306,6 +2302,11 @@ function FileExplorerRibbon $Minimized ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Expanded" @@ -2365,6 +2366,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -2653,6 +2659,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -2768,6 +2779,23 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + + # Checking whether small taskbar buttons enabled + # Due to "Set-StrictMode -Version Latest" we have to use GetValue() + $TaskbarSmallIcons = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons", $null)) + if ($TaskbarSmallIcons -eq 1) + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -2874,6 +2902,11 @@ function PeopleTaskbar $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -2933,6 +2966,11 @@ function NotificationAreaIcons $Hide ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Show" @@ -2997,6 +3035,79 @@ function SecondsInSystemClock } } +<# + .SYNOPSIS + Combine taskbar buttons and hide labels + + .PARAMETER Always + Combine taskbar buttons and always hide labels + + .PARAMETER Full + Combine taskbar buttons and hide labels when taskbar is full + + .PARAMETER Never + Combine taskbar buttons and never hide labels + + .EXAMPLE + TaskbarCombine -Always + + .EXAMPLE + TaskbarCombine -Full + + .EXAMPLE + TaskbarCombine -Never + + .NOTES + Current user +#> +function TaskbarCombine +{ + param + ( + [Parameter( + Mandatory = $true, + ParameterSetName = "Always" + )] + [switch] + $Always, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Full" + )] + [switch] + $Full, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Never" + )] + [switch] + $Never + ) + + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + + switch ($PSCmdlet.ParameterSetName) + { + "Always" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force + } + "Full" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force + } + "Never" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force + } + } +} + <# .SYNOPSIS The Control Panel icons view @@ -3048,32 +3159,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -3178,10 +3286,13 @@ function NewAppInstalledNotification New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type DWORD -Value 1 } "Show" { Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type CLEAR } } } @@ -3224,6 +3335,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3400,6 +3515,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3606,7 +3723,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -3697,7 +3814,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -3912,7 +4029,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -3962,22 +4079,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -4306,57 +4420,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -4965,19 +5028,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -5029,18 +5102,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -7299,7 +7360,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -8126,6 +8187,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8151,6 +8213,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8244,6 +8307,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8301,6 +8365,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8436,7 +8501,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -8445,6 +8510,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -8453,44 +8523,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -8505,6 +8563,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -8650,19 +8713,25 @@ function RecentlyAddedApps $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Hide" { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer)) + if (-not (Test-Path -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer)) { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force + New-Item -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Force } - New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type DWORD -Value 1 } "Show" { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type CLEAR } } } @@ -8705,6 +8774,10 @@ function AppSuggestions $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -8830,14 +8903,18 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -9265,14 +9342,18 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -9579,14 +9660,18 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -9970,7 +10055,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -11074,24 +11159,12 @@ function BitmapImageNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -11165,24 +11238,12 @@ function RichTextDocumentNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.WordPad*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -11594,11 +11655,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_10_LTSC_2019/Sophia.ps1 b/src/Sophia_Script_for_Windows_10_LTSC_2019/Sophia.ps1 index ff630db7f..5116dc2fd 100644 --- a/src/Sophia_Script_for_Windows_10_LTSC_2019/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_10_LTSC_2019/Sophia.ps1 @@ -279,11 +279,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Expand the File Explorer ribbon +# Expand File Explorer ribbon # Развернуть ленту проводника FileExplorerRibbon -Expanded -# Minimize the File Explorer ribbon (default value) +# Minimize File Explorer ribbon (default value) # Свернуть ленту проводника (значение по умолчанию) # FileExplorerRibbon -Minimized @@ -379,6 +379,18 @@ SecondsInSystemClock -Show # Скрыть секунды в системных часах на панели задач (значение по умолчанию) # SecondsInSystemClock -Hide +# Combine taskbar buttons and always hide labels (default value) +# Объединить кнопки панели задач и всегда скрывать метки (значение по умолчанию) +TaskbarCombine -Always + +# Combine taskbar buttons and hide labels when taskbar is full +# Объединить кнопки панели задач и скрывать метки при переполнении панели задач +# TaskbarCombine -Full + +# Combine taskbar buttons and never hide labels +# Объединить кнопки панели задач и никогда не скрывать метки +# TaskbarCombine -Never + # View the Control Panel icons by large icons # Просмотр иконок Панели управления как: крупные значки ControlPanelView -LargeIcons @@ -543,14 +555,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable diff --git a/src/Sophia_Script_for_Windows_10_LTSC_2021/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_10_LTSC_2021/Module/Sophia.psm1 index f7aed84ed..545519371 100644 --- a/src/Sophia_Script_for_Windows_10_LTSC_2021/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_10_LTSC_2021/Module/Sophia.psm1 @@ -686,6 +686,7 @@ public extern static string BrandingFormatString(string sFormat); exit } + # Detect Windows build version switch ((Get-CimInstance -ClassName CIM_OperatingSystem).BuildNumber) { {$_ -ne 19044} @@ -1274,8 +1275,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1352,11 +1352,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1825,22 +1825,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -1884,22 +1881,19 @@ function WhatsNewInWindows $Enable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } } @@ -2419,6 +2413,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2470,22 +2466,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2493,13 +2486,13 @@ function FileTransferDialog <# .SYNOPSIS - The File Explorer ribbon + File Explorer ribbon .PARAMETER Expanded - Expand the File Explorer ribbon + Expand File Explorer ribbon .PARAMETER Minimized - Minimize the File Explorer ribbon + Minimize File Explorer ribbon .EXAMPLE FileExplorerRibbon -Expanded @@ -2529,6 +2522,11 @@ function FileExplorerRibbon $Minimized ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Expanded" @@ -2588,6 +2586,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -2876,6 +2879,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -2991,6 +2999,23 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + + # Checking whether small taskbar buttons enabled + # Due to "Set-StrictMode -Version Latest" we have to use GetValue() + $TaskbarSmallIcons = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons", $null)) + if ($TaskbarSmallIcons -eq 1) + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3097,6 +3122,11 @@ function PeopleTaskbar $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3156,6 +3186,10 @@ function WindowsInkWorkspace $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\WindowsInkWorkspace -Name AllowWindowsInkWorkspace -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3207,6 +3241,11 @@ function NotificationAreaIcons $Hide ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Show" @@ -3271,6 +3310,79 @@ function SecondsInSystemClock } } +<# + .SYNOPSIS + Combine taskbar buttons and hide labels + + .PARAMETER Always + Combine taskbar buttons and always hide labels + + .PARAMETER Full + Combine taskbar buttons and hide labels when taskbar is full + + .PARAMETER Never + Combine taskbar buttons and never hide labels + + .EXAMPLE + TaskbarCombine -Always + + .EXAMPLE + TaskbarCombine -Full + + .EXAMPLE + TaskbarCombine -Never + + .NOTES + Current user +#> +function TaskbarCombine +{ + param + ( + [Parameter( + Mandatory = $true, + ParameterSetName = "Always" + )] + [switch] + $Always, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Full" + )] + [switch] + $Full, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Never" + )] + [switch] + $Never + ) + + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + + switch ($PSCmdlet.ParameterSetName) + { + "Always" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force + } + "Full" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force + } + "Never" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force + } + } +} + <# .SYNOPSIS The Control Panel icons view @@ -3322,32 +3434,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -3503,10 +3612,13 @@ function NewAppInstalledNotification New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type DWORD -Value 1 } "Show" { Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type CLEAR } } } @@ -3549,6 +3661,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3725,6 +3841,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3882,6 +4000,11 @@ function AeroShaking $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Enable" @@ -3982,7 +4105,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -4073,7 +4196,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -4288,7 +4411,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -4338,22 +4461,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -4682,57 +4802,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -5357,19 +5426,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -5421,18 +5500,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -7930,7 +7997,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -8757,6 +8824,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8782,6 +8850,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8875,6 +8944,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -8932,6 +9002,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9067,7 +9138,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -9076,6 +9147,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -9084,44 +9160,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -9136,6 +9200,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -9451,19 +9520,25 @@ function RecentlyAddedApps $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Hide" { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer)) + if (-not (Test-Path -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer)) { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force + New-Item -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Force } - New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type DWORD -Value 1 } "Show" { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type CLEAR } } } @@ -9506,6 +9581,10 @@ function AppSuggestions $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -9945,14 +10024,18 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -10380,14 +10463,18 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -10694,14 +10781,18 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -11085,7 +11176,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -12186,7 +12277,7 @@ function ImagesEditContext $Show ) - if (-not ((Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*").State -eq "Installed")) + if ((Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*").State -ne "Installed") { return } @@ -12425,24 +12516,12 @@ function BitmapImageNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -12516,24 +12595,12 @@ function RichTextDocumentNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.WordPad*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -12945,11 +13012,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_10_LTSC_2021/Sophia.ps1 b/src/Sophia_Script_for_Windows_10_LTSC_2021/Sophia.ps1 index 9ddeb4bc1..98a1a909f 100644 --- a/src/Sophia_Script_for_Windows_10_LTSC_2021/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_10_LTSC_2021/Sophia.ps1 @@ -303,11 +303,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Expand the File Explorer ribbon +# Expand File Explorer ribbon # Развернуть ленту проводника FileExplorerRibbon -Expanded -# Minimize the File Explorer ribbon (default value) +# Minimize File Explorer ribbon (default value) # Свернуть ленту проводника (значение по умолчанию) # FileExplorerRibbon -Minimized @@ -419,6 +419,18 @@ SecondsInSystemClock -Show # Скрыть секунды в системных часах на панели задач (значение по умолчанию) # SecondsInSystemClock -Hide +# Combine taskbar buttons and always hide labels (default value) +# Объединить кнопки панели задач и всегда скрывать метки (значение по умолчанию) +TaskbarCombine -Always + +# Combine taskbar buttons and hide labels when taskbar is full +# Объединить кнопки панели задач и скрывать метки при переполнении панели задач +# TaskbarCombine -Full + +# Combine taskbar buttons and never hide labels +# Объединить кнопки панели задач и никогда не скрывать метки +# TaskbarCombine -Never + # View the Control Panel icons by large icons # Просмотр иконок Панели управления как: крупные значки ControlPanelView -LargeIcons @@ -599,14 +611,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable diff --git a/src/Sophia_Script_for_Windows_10_PowerShell_7/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_10_PowerShell_7/Module/Sophia.psm1 index 9dc1df18d..1a088f015 100644 --- a/src/Sophia_Script_for_Windows_10_PowerShell_7/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_10_PowerShell_7/Module/Sophia.psm1 @@ -417,7 +417,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); Write-Error -Message ($Localization.NoResponse -f "https://github.com") -ErrorAction SilentlyContinue } - # Checking whether Get-WindowsEdition cmdlet is working + # Checking whether PowerShell 7 was installed from the Microsoft Store # https://github.com/PowerShell/PowerShell/issues/21295 if ((Get-Process -Id $PID).Path -match "C:\\Program Files\\WindowsApps") { @@ -1283,7 +1283,7 @@ function DiagnosticDataLevel { "Minimal" { - if (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")}) + if (([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Enterprise") -or ([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Education")) { # Security level New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force @@ -1350,8 +1350,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1359,11 +1358,8 @@ function ErrorReporting { "Disable" { - if ((Get-WindowsEdition -Online).Edition -notmatch "Core") - { - Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask - New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force - } + Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask + New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force Get-Service -Name WerSvc | Stop-Service -Force Get-Service -Name WerSvc | Set-Service -StartupType Disabled @@ -1431,11 +1427,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1904,22 +1900,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -2179,22 +2172,19 @@ function WhatsNewInWindows $Enable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } } @@ -2765,6 +2755,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2816,22 +2808,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2839,13 +2828,13 @@ function FileTransferDialog <# .SYNOPSIS - The File Explorer ribbon + File Explorer ribbon .PARAMETER Expanded - Expand the File Explorer ribbon + Expand File Explorer ribbon .PARAMETER Minimized - Minimize the File Explorer ribbon + Minimize File Explorer ribbon .EXAMPLE FileExplorerRibbon -Expanded @@ -2875,6 +2864,11 @@ function FileExplorerRibbon $Minimized ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ExplorerRibbonStartsMinimized -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Expanded" @@ -2934,6 +2928,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -3222,6 +3221,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3337,6 +3341,23 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + + # Checking whether small taskbar buttons enabled + # Due to "Set-StrictMode -Version Latest" we have to use GetValue() + $TaskbarSmallIcons = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "TaskbarSmallIcons", $null)) + if ($TaskbarSmallIcons -eq 1) + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3392,12 +3413,30 @@ function SearchHighlights $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds\DSB -Name ShowDynamicContent -PropertyType DWord -Value 0 -Force - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\SearchSettings -Name IsDynamicSearchBoxEnabled -PropertyType DWord -Value 0 -Force + # Checking whether "Web search in Windows Search" was disabled. It also disable Search Highlights automatically + # Due to "Set-StrictMode -Version Latest" we have to use GetValue() + $DisableSearchBoxSuggestions = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer", "DisableSearchBoxSuggestions", $null)) + if ($DisableSearchBoxSuggestions -eq 1) + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } + else + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds\DSB -Name ShowDynamicContent -PropertyType DWord -Value 0 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\SearchSettings -Name IsDynamicSearchBoxEnabled -PropertyType DWord -Value 0 -Force + } } "Show" { @@ -3445,6 +3484,10 @@ function CortanaButton $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name AllowCortana -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name AllowCortana -Type CLEAR + if (-not (Get-AppxPackage -Name Microsoft.549981C3F5F10)) { Write-Information -MessageData "" -InformationAction Continue @@ -3467,57 +3510,6 @@ function CortanaButton } } -<# - .SYNOPSIS - Copilot button on the taskbar - - .PARAMETER Hide - Hide Copilot button on the taskbar - - .PARAMETER Show - Show Copilot button on the taskbar - - .EXAMPLE - CopilotButton -Hide - - .EXAMPLE - CopilotButton -Show - - .NOTES - Current user -#> -function CopilotButton -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Hide" - )] - [switch] - $Hide, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Show" - )] - [switch] - $Show - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Hide" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 0 -Force - } - "Show" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 1 -Force - } - } -} - <# .SYNOPSIS Task view button on the taskbar @@ -3610,7 +3602,11 @@ function NewsInterests $Enable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -Name EnableFeeds -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\NewsAndInterests\AllowNewsAndInterests" -Name value -Force -ErrorAction Ignore + + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -3619,10 +3615,6 @@ function NewsInterests return } - # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Feeds" -Name EnableFeeds -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\PolicyManager\default\NewsAndInterests\AllowNewsAndInterests" -Name value -Force -ErrorAction Ignore - # Due to "Set-StrictMode -Version Latest" we have to use GetValue() $MachineId = [Microsoft.Win32.Registry]::GetValue("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQMClient", "MachineId", $null) if (-not $MachineId) @@ -3636,11 +3628,11 @@ function NewsInterests # https://forums.mydigitallife.net/threads/taskbarda-widgets-registry-change-is-now-blocked.88547/#post-1849006 $Signature = @{ - Namespace = "WinAPI" - Name = "Signature" - Language = "CSharp" - CompilerParameters = $CompilerOptions - MemberDefinition = @" + Namespace = "WinAPI" + Name = "Signature" + Language = "CSharp" + CompilerOptions = $CompilerOptions + MemberDefinition = @" [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)] public static extern int HashData(byte[] pbData, int cbData, byte[] piet, int outputLen); "@ @@ -3669,9 +3661,9 @@ public static extern int HashData(byte[] pbData, int cbData, byte[] piet, int ou # Get value to save in EnShellFeedsTaskbarViewMode key $DWordData = [System.BitConverter]::ToUInt32($bytesOut,0) - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 2 -Force} + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 2 -Force} # We need to use here an approach with "-Command & {}" as there's a variable inside - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" } "Enable" { @@ -3687,9 +3679,9 @@ public static extern int HashData(byte[] pbData, int cbData, byte[] piet, int ou # Get value to save in EnShellFeedsTaskbarViewMode key $DWordData = [System.BitConverter]::ToUInt32($bytesOut,0) - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 0 -Force} + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name ShellFeedsTaskbarViewMode -PropertyType DWord -Value 0 -Force} # We need to use here an approach with "-Command & {}" as there's a variable inside - & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" + & "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Command "& {New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Feeds -Name EnShellFeedsTaskbarViewMode -PropertyType DWord -Value $DWordData -Force}" } } @@ -3734,6 +3726,11 @@ function PeopleTaskbar $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HidePeopleBar -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3793,6 +3790,11 @@ function MeetNow $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3850,6 +3852,10 @@ function WindowsInkWorkspace $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\WindowsInkWorkspace -Name AllowWindowsInkWorkspace -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name HideSCAMeetNow -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3901,6 +3907,11 @@ function NotificationAreaIcons $Hide ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoAutoTrayNotify -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Show" @@ -3965,6 +3976,79 @@ function SecondsInSystemClock } } +<# + .SYNOPSIS + Combine taskbar buttons and hide labels + + .PARAMETER Always + Combine taskbar buttons and always hide labels + + .PARAMETER Full + Combine taskbar buttons and hide labels when taskbar is full + + .PARAMETER Never + Combine taskbar buttons and never hide labels + + .EXAMPLE + TaskbarCombine -Always + + .EXAMPLE + TaskbarCombine -Full + + .EXAMPLE + TaskbarCombine -Never + + .NOTES + Current user +#> +function TaskbarCombine +{ + param + ( + [Parameter( + Mandatory = $true, + ParameterSetName = "Always" + )] + [switch] + $Always, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Full" + )] + [switch] + $Full, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Never" + )] + [switch] + $Never + ) + + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + + switch ($PSCmdlet.ParameterSetName) + { + "Always" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force + } + "Full" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force + } + "Never" + { + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force + } + } +} + <# .SYNOPSIS Unpin shortcuts from the taskbar @@ -4087,32 +4171,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -4268,10 +4349,13 @@ function NewAppInstalledNotification New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type DWORD -Value 1 } "Show" { Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoNewAppAlert -Type CLEAR } } } @@ -4314,6 +4398,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4490,6 +4578,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4647,6 +4737,11 @@ function AeroShaking $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Enable" @@ -4747,7 +4842,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -4838,7 +4933,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -5053,7 +5148,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -5225,12 +5320,12 @@ public static bool MarkFileDelete (string sourcefile) # Getting the OneDrive folder path and replacing quotes if exist $OneDriveFolder = (Split-Path -Path (Split-Path -Path $OneDriveSetup[0] -Parent)) -replace '"', "" - # Do not restart the File Explorer process automatically if it stops in order to unload libraries + # Do not restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 0 -Force # Kill all explorer instances in case "launch folder windows in a separate process" enabled Get-Process -Name explorer | Stop-Process -Force Start-Sleep -Seconds 3 - # Restart the File Explorer process automatically if it stops in order to unload libraries + # Restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 1 -Force # Attempt to unregister FileSyncShell64.dll and remove @@ -5394,22 +5489,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -5738,57 +5830,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -6410,19 +6451,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -6474,18 +6525,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -9094,7 +9133,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -9973,6 +10012,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9998,6 +10038,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -10091,6 +10132,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -10148,6 +10190,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -10221,11 +10264,11 @@ function RKNBypass } $Signature = @{ - Namespace = "WinAPI" - Name = "wininet" - Language = "CSharp" - CompilerParameters = $CompilerParameters - MemberDefinition = @" + Namespace = "WinAPI" + Name = "wininet" + Language = "CSharp" + CompilerOptions = $CompilerOptions + MemberDefinition = @" [DllImport("wininet.dll", SetLastError = true, CharSet=CharSet.Auto)] public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); "@ @@ -10283,7 +10326,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -10292,6 +10335,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -10300,44 +10348,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -10352,6 +10388,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -10667,19 +10708,25 @@ function RecentlyAddedApps $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Hide" { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer)) + if (-not (Test-Path -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer)) { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Force + New-Item -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Force } - New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -PropertyType DWord -Value 1 -Force + + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type DWORD -Value 1 } "Show" { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Force -ErrorAction Ignore + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideRecentlyAddedApps -Type CLEAR } } } @@ -10722,6 +10769,13 @@ function AppSuggestions $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Force -ErrorAction Ignore + if (([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Enterprise") -or ([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Education")) + { + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\CloudContent -Name DisableWindowsConsumerFeatures -Type CLEAR + } + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -11701,22 +11755,19 @@ function CortanaAutostart return } + if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) + { + New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 1 -Force } "Enable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 2 -Force } } @@ -12089,14 +12140,18 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -12524,14 +12579,18 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -12838,14 +12897,18 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -13229,7 +13292,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -13761,7 +13824,8 @@ function WindowsSandbox $Enable ) - if (-not (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Professional") -or ($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")})) + $WINDOWS_LONG = [WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") + if (($WINDOWS_LONG -notmatch "Pro") -and ($WINDOWS_LONG -notmatch "Enterprise") -and ($WINDOWS_LONG -notmatch "Education")) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -14301,6 +14365,66 @@ function EditWithPaint3DContext } } +<# + .SYNOPSIS + The "Edit" item in the images context menu + + .PARAMETER Hide + Hide the "Edit" item from the images context menu + + .PARAMETER Show + Show the "Edit" item in the images context menu + + .EXAMPLE + ImagesEditContext -Hide + + .EXAMPLE + ImagesEditContext -Show + + .NOTES + Current user +#> +function ImagesEditContext +{ + param + ( + [Parameter( + Mandatory = $true, + ParameterSetName = "Hide" + )] + [switch] + $Hide, + + [Parameter( + Mandatory = $true, + ParameterSetName = "Show" + )] + [switch] + $Show + ) + + if ((Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*").State -ne "Installed") + { + return + } + + switch ($PSCmdlet.ParameterSetName) + { + "Hide" + { + if (-not (Test-Path -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit)) + { + New-Item -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Force + } + New-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Name ProgrammaticAccessOnly -PropertyType String -Value "" -Force + } + "Show" + { + Remove-ItemProperty -Path Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\image\shell\edit -Name ProgrammaticAccessOnly -Force -ErrorAction Ignore + } + } +} + <# .SYNOPSIS The "Print" item in the .bat and .cmd context menu @@ -14518,24 +14642,12 @@ function BitmapImageNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.MSPaint*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -14609,24 +14721,12 @@ function RichTextDocumentNewContext { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message $Localization.Patient -Verbose Get-WindowsCapability -Online -Name "Microsoft.Windows.WordPad*" | Add-WindowsCapability -Online } - catch [System.ComponentModel.Win32Exception] + catch [System.Runtime.InteropServices.COMException] { Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue @@ -14784,7 +14884,7 @@ function UseStoreOpenWith ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Type CLEAR switch ($PSCmdlet.ParameterSetName) @@ -15110,11 +15210,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_10_PowerShell_7/Sophia.ps1 b/src/Sophia_Script_for_Windows_10_PowerShell_7/Sophia.ps1 index 630d2f77e..546cb0a32 100644 --- a/src/Sophia_Script_for_Windows_10_PowerShell_7/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_10_PowerShell_7/Sophia.ps1 @@ -354,11 +354,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Expand the File Explorer ribbon +# Expand File Explorer ribbon # Развернуть ленту проводника FileExplorerRibbon -Expanded -# Minimize the File Explorer ribbon (default value) +# Minimize File Explorer ribbon (default value) # Свернуть ленту проводника (значение по умолчанию) # FileExplorerRibbon -Minimized @@ -446,14 +446,6 @@ CortanaButton -Hide # Показать кнопку Кортаны на панели задач (значение по умолчанию) # CortanaButton -Show -# Hide Copilot button on the taskbar -# Скрыть кнопку Copilot с панели задач -CopilotButton -Hide - -# Show Copilot button on the taskbar (default value) -# Отобразить кнопку Copilot на панели задач (значение по умолчанию) -# CopilotButton -Show - # Hide the Task View button on the taskbar # Скрыть кнопку Просмотра задач TaskViewButton -Hide @@ -510,6 +502,18 @@ SecondsInSystemClock -Show # Скрыть секунды в системных часах на панели задач (значение по умолчанию) # SecondsInSystemClock -Hide +# Combine taskbar buttons and always hide labels (default value) +# Объединить кнопки панели задач и всегда скрывать метки (значение по умолчанию) +TaskbarCombine -Always + +# Combine taskbar buttons and hide labels when taskbar is full +# Объединить кнопки панели задач и скрывать метки при переполнении панели задач +# TaskbarCombine -Full + +# Combine taskbar buttons and never hide labels +# Объединить кнопки панели задач и никогда не скрывать метки +# TaskbarCombine -Never + # Unpin the "Microsoft Edge", "Microsoft Store", or "Mail" shortcuts from the taskbar # Открепить ярлыки "Microsoft Edge", "Microsoft Store" или "Почта" от панели задач UnpinTaskbarShortcuts -Shortcuts Edge, Store, Mail @@ -708,14 +712,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable @@ -1380,6 +1376,14 @@ EditWithPaint3DContext -Hide # Отобразить пункт "Изменить с помощью Paint 3D" в контекстном меню медиа-файлов (значение по умолчанию) # EditWithPaint3DContext -Show +# Hide the "Edit" item from the images context menu +# Скрыть пункт "Изменить" из контекстного меню изображений +ImagesEditContext -Hide + +# Show the "Edit" item in images context menu (default value) +# Отобразить пункт "Изменить" в контекстном меню изображений (значение по умолчанию) +# ImagesEditContext -Show + # Hide the "Print" item from the .bat and .cmd context menu # Скрыть пункт "Печать" из контекстного меню .bat и .cmd файлов PrintCMDContext -Hide diff --git a/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 index e8c507f5b..04784ae79 100644 --- a/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 @@ -1239,7 +1239,7 @@ function DiagnosticDataLevel { "Minimal" { - if (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")}) + if (([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Enterprise") -or ([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Education")) { # Diagnostic data off New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force @@ -1306,8 +1306,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1315,11 +1314,8 @@ function ErrorReporting { "Disable" { - if ((Get-WindowsEdition -Online).Edition -notmatch "Core") - { - Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask - New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force - } + Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask + New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force Get-Service -Name WerSvc | Stop-Service -Force Get-Service -Name WerSvc | Set-Service -StartupType Disabled @@ -1387,11 +1383,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1866,22 +1862,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -2141,22 +2134,19 @@ function WhatsNewInWindows $Enable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } } @@ -2694,10 +2684,10 @@ function OpenFileExplorerTo File Explorer mode .PARAMETER Disable - Disable the File Explorer compact mode + Disable File Explorer compact mode .PARAMETER Enable - Enable the File Explorer compact mode + Enable File Explorer compact mode .EXAMPLE FileExplorerCompactMode -Disable @@ -2829,6 +2819,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2880,22 +2872,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2939,6 +2928,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -2994,6 +2988,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3156,6 +3155,11 @@ function TaskbarWidgets return } + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PolicyManager\default\NewsAndInterests\AllowNewsAndInterests -Name value -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Dsh -Name AllowNewsAndInterests -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Dsh -Name AllowNewsAndInterests -Type CLEAR + # We cannot set a value to TaskbarDa, having called any of APIs, except of copying powershell.exe (or any other tricks) with a different name, due to a UCPD driver tracks all executables to block the access to the registry Copy-Item -Path "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe" -Destination "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Force @@ -3235,6 +3239,12 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PolicyManager\default\Search\DisableSearch -Name value -PropertyType DWord -Value 0 -Force + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3294,11 +3304,15 @@ function SearchHighlights $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" { - # Checking whether "Ask Copilot" and "Find results in Web" (Web) were disabled. They also disable Search Highlights automatically + # Checking whether "Ask Copilot" and "Find results in Web" were disabled. They also disable Search Highlights automatically # Due to "Set-StrictMode -Version Latest" we have to use GetValue() $BingSearchEnabled = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search", "BingSearchEnabled", $null)) $DisableSearchBoxSuggestions = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer", "DisableSearchBoxSuggestions", $null)) @@ -3317,7 +3331,7 @@ function SearchHighlights } "Show" { - # Enable "Ask Copilot" and "Find results in Web" (Web) icons in Windows Search in order to enable Search Highlights + # Enable "Ask Copilot" and "Find results in Web" icons in Windows Search in order to enable Search Highlights Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Search -Name BingSearchEnabled -Force -ErrorAction Ignore Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name DisableSearchBoxSuggestions -Force -ErrorAction Ignore @@ -3326,57 +3340,6 @@ function SearchHighlights } } -<# - .SYNOPSIS - Copilot button on the taskbar - - .PARAMETER Hide - Hide Copilot button on the taskbar - - .PARAMETER Show - Show Copilot button on the taskbar - - .EXAMPLE - CopilotButton -Hide - - .EXAMPLE - CopilotButton -Show - - .NOTES - Current user -#> -function CopilotButton -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Hide" - )] - [switch] - $Hide, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Show" - )] - [switch] - $Show - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Hide" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 0 -Force - } - "Show" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 1 -Force - } - } -} - <# .SYNOPSIS Task view button on the taskbar @@ -3415,6 +3378,11 @@ function TaskViewButton $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3530,19 +3498,24 @@ function TaskbarCombine $Never ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Always" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 0 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force } "Full" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force } "Never" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force } } } @@ -3713,32 +3686,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -3885,6 +3855,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3987,6 +3961,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4144,6 +4120,11 @@ function AeroShaking $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Enable" @@ -4244,7 +4225,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -4335,7 +4316,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -4550,7 +4531,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -4720,12 +4701,12 @@ public static bool MarkFileDelete (string sourcefile) # Getting the OneDrive folder path and replacing quotes if exist $OneDriveFolder = (Split-Path -Path (Split-Path -Path $OneDriveSetup[0] -Parent)) -replace '"', "" - # Do not restart the File Explorer process automatically if it stops in order to unload libraries + # Do not restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 0 -Force # Kill all explorer instances in case "launch folder windows in a separate process" enabled Get-Process -Name explorer | Stop-Process -Force Start-Sleep -Seconds 3 - # Restart the File Explorer process automatically if it stops in order to unload libraries + # Restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 1 -Force # Attempt to unregister FileSyncShell64.dll and remove @@ -4889,22 +4870,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -4948,21 +4926,20 @@ function StorageSenseTempFiles $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if ((Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 1 -Force - } + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if ((Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01) -eq "1") - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 04 -PropertyType DWord -Value 0 -Force - } + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } } @@ -5233,57 +5210,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -5902,19 +5828,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -5966,18 +5902,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -8586,7 +8510,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -9490,6 +9414,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9515,6 +9440,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9608,6 +9534,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9665,6 +9592,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9800,7 +9728,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -9809,6 +9737,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -9817,44 +9750,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -9869,6 +9790,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -10769,22 +10695,19 @@ function CortanaAutostart return } + if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) + { + New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 1 -Force } "Enable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 2 -Force } } @@ -11142,14 +11065,28 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -11577,14 +11514,28 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -11891,14 +11842,28 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -12282,7 +12247,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -12812,7 +12777,8 @@ function WindowsSandbox $Enable ) - if (-not (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Professional") -or ($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")})) + $WINDOWS_LONG = [WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") + if (($WINDOWS_LONG -notmatch "Pro") -and ($WINDOWS_LONG -notmatch "Enterprise") -and ($WINDOWS_LONG -notmatch "Education")) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -13090,7 +13056,8 @@ function LocalSecurityAuthority ) # Remove all policies in order to make changes visible in UI only if it's possible - Set-Policy -Scope Computer -Path Software\Policies\Microsoft\Windows\Explorer -Name RunAsPPL -Type CLEAR + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Type CLEAR switch ($PSCmdlet.ParameterSetName) { @@ -13122,7 +13089,6 @@ function LocalSecurityAuthority "Disable" { Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RunAsPPL, RunAsPPLBoot -Force -ErrorAction Ignore - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Force -ErrorAction Ignore } } } @@ -13576,7 +13542,7 @@ function UseStoreOpenWith ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Type CLEAR switch ($PSCmdlet.ParameterSetName) @@ -14063,11 +14029,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_11/Sophia.ps1 b/src/Sophia_Script_for_Windows_11/Sophia.ps1 index badfbdb85..7adfd0428 100644 --- a/src/Sophia_Script_for_Windows_11/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_11/Sophia.ps1 @@ -357,11 +357,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Disable the File Explorer compact mode (default value) +# Disable File Explorer compact mode (default value) # Отключить компактный вид проводника (значение по умолчанию) FileExplorerCompactMode -Disable -# Enable the File Explorer compact mode +# Enable File Explorer compact mode # Включить компактный вид проводника # FileExplorerCompactMode -Enable @@ -453,14 +453,6 @@ SearchHighlights -Hide # Показать главное в поиске (значение по умолчанию) # SearchHighlights -Show -# Hide Copilot button on the taskbar -# Скрыть кнопку Copilot с панели задач -CopilotButton -Hide - -# Show Copilot button on the taskbar (default value) -# Отобразить кнопку Copilot на панели задач (значение по умолчанию) -# CopilotButton -Show - # Hide the Task view button from the taskbar # Скрыть кнопку "Представление задач" с панели задач TaskViewButton -Hide @@ -679,14 +671,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable diff --git a/src/Sophia_Script_for_Windows_11_LTSC_2024/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_11_LTSC_2024/Module/Sophia.psm1 index 0ce2cf8e4..e04d4cd3c 100644 --- a/src/Sophia_Script_for_Windows_11_LTSC_2024/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_11_LTSC_2024/Module/Sophia.psm1 @@ -1277,8 +1277,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1355,11 +1354,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1834,22 +1833,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -2109,22 +2105,19 @@ function WhatsNewInWindows $Enable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } } @@ -2662,10 +2655,10 @@ function OpenFileExplorerTo File Explorer mode .PARAMETER Disable - Disable the File Explorer compact mode + Disable File Explorer compact mode .PARAMETER Enable - Enable the File Explorer compact mode + Enable File Explorer compact mode .EXAMPLE FileExplorerCompactMode -Disable @@ -2797,6 +2790,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2848,22 +2843,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2907,6 +2899,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -2962,6 +2959,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3138,6 +3140,12 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PolicyManager\default\Search\DisableSearch -Name value -PropertyType DWord -Value 0 -Force + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3197,11 +3205,15 @@ function SearchHighlights $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" { - # Checking whether "Ask Copilot" and "Find results in Web" (Web) were disabled. They also disable Search Highlights automatically + # Checking whether "Ask Copilot" and "Find results in Web" were disabled. They also disable Search Highlights automatically # Due to "Set-StrictMode -Version Latest" we have to use GetValue() $BingSearchEnabled = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search", "BingSearchEnabled", $null)) $DisableSearchBoxSuggestions = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer", "DisableSearchBoxSuggestions", $null)) @@ -3220,7 +3232,7 @@ function SearchHighlights } "Show" { - # Enable "Ask Copilot" and "Find results in Web" (Web) icons in Windows Search in order to enable Search Highlights + # Enable "Ask Copilot" and "Find results in Web" icons in Windows Search in order to enable Search Highlights Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Search -Name BingSearchEnabled -Force -ErrorAction Ignore Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name DisableSearchBoxSuggestions -Force -ErrorAction Ignore @@ -3229,57 +3241,6 @@ function SearchHighlights } } -<# - .SYNOPSIS - Copilot button on the taskbar - - .PARAMETER Hide - Hide Copilot button on the taskbar - - .PARAMETER Show - Show Copilot button on the taskbar - - .EXAMPLE - CopilotButton -Hide - - .EXAMPLE - CopilotButton -Show - - .NOTES - Current user -#> -function CopilotButton -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Hide" - )] - [switch] - $Hide, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Show" - )] - [switch] - $Show - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Hide" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 0 -Force - } - "Show" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 1 -Force - } - } -} - <# .SYNOPSIS Task view button on the taskbar @@ -3318,6 +3279,11 @@ function TaskViewButton $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3433,19 +3399,24 @@ function TaskbarCombine $Never ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Always" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 0 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force } "Full" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force } "Never" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force } } } @@ -3557,32 +3528,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -3729,6 +3697,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3831,6 +3803,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -3988,6 +3962,11 @@ function AeroShaking $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Enable" @@ -4088,7 +4067,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -4179,7 +4158,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -4394,7 +4373,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -4502,22 +4481,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -4846,57 +4822,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -5515,19 +5440,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -5579,18 +5514,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -8199,7 +8122,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -9026,6 +8949,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9051,6 +8975,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9144,6 +9069,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9201,6 +9127,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9336,7 +9263,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -9345,6 +9272,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -9353,44 +9285,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -9405,6 +9325,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -10434,14 +10359,28 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -10869,14 +10808,28 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -11183,14 +11136,28 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -11574,7 +11541,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -12373,7 +12340,8 @@ function LocalSecurityAuthority ) # Remove all policies in order to make changes visible in UI only if it's possible - Set-Policy -Scope Computer -Path Software\Policies\Microsoft\Windows\Explorer -Name RunAsPPL -Type CLEAR + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Type CLEAR switch ($PSCmdlet.ParameterSetName) { @@ -12405,7 +12373,6 @@ function LocalSecurityAuthority "Disable" { Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RunAsPPL, RunAsPPLBoot -Force -ErrorAction Ignore - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Force -ErrorAction Ignore } } } @@ -12981,11 +12948,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_11_LTSC_2024/Sophia.ps1 b/src/Sophia_Script_for_Windows_11_LTSC_2024/Sophia.ps1 index cb5771a7b..2e2fa7cb6 100644 --- a/src/Sophia_Script_for_Windows_11_LTSC_2024/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_11_LTSC_2024/Sophia.ps1 @@ -355,11 +355,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Disable the File Explorer compact mode (default value) +# Disable File Explorer compact mode (default value) # Отключить компактный вид проводника (значение по умолчанию) FileExplorerCompactMode -Disable -# Enable the File Explorer compact mode +# Enable File Explorer compact mode # Включить компактный вид проводника # FileExplorerCompactMode -Enable @@ -443,14 +443,6 @@ SearchHighlights -Hide # Показать главное в поиске (значение по умолчанию) # SearchHighlights -Show -# Hide Copilot button on the taskbar -# Скрыть кнопку Copilot с панели задач -CopilotButton -Hide - -# Show Copilot button on the taskbar (default value) -# Отобразить кнопку Copilot на панели задач (значение по умолчанию) -# CopilotButton -Show - # Hide the Task view button from the taskbar # Скрыть кнопку "Представление задач" с панели задач TaskViewButton -Hide @@ -659,14 +651,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable diff --git a/src/Sophia_Script_for_Windows_11_PowerShell_7/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_11_PowerShell_7/Module/Sophia.psm1 index 7b2bf7d35..054c6228c 100644 --- a/src/Sophia_Script_for_Windows_11_PowerShell_7/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_11_PowerShell_7/Module/Sophia.psm1 @@ -1257,7 +1257,7 @@ function DiagnosticDataLevel { "Minimal" { - if (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")}) + if (([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Enterprise") -or ([WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") -match "Education")) { # Diagnostic data off New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name AllowTelemetry -PropertyType DWord -Value 0 -Force @@ -1324,8 +1324,7 @@ function ErrorReporting ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore - Remove-ItemProperty -Path "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting", "HKCU:\Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR Set-Policy -Scope User -Path "Software\Policies\Microsoft\Windows\Windows Error Reporting" -Name Disabled -Type CLEAR @@ -1333,11 +1332,8 @@ function ErrorReporting { "Disable" { - if ((Get-WindowsEdition -Online).Edition -notmatch "Core") - { - Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask - New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force - } + Get-ScheduledTask -TaskName QueueReporting -ErrorAction Ignore | Disable-ScheduledTask + New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Windows Error Reporting" -Name Disabled -PropertyType DWord -Value 1 -Force Get-Service -Name WerSvc | Stop-Service -Force Get-Service -Name WerSvc | Set-Service -StartupType Disabled @@ -1405,11 +1401,11 @@ function FeedbackFrequency } New-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name NumberOfSIUFInPeriod -PropertyType DWord -Value 0 -Force - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds -Force -ErrorAction Ignore } "Automatically" { - Remove-ItemProperty -Path HKCU:\SOFTWARE\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Siuf\Rules -Name PeriodInNanoSeconds, NumberOfSIUFInPeriod -Force -ErrorAction Ignore } } } @@ -1884,22 +1880,19 @@ function AdvertisingID Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\AdvertisingInfo -Name DisabledByGroupPolicy -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\DataCollection -Name DisabledByGroupPolicy -Type CLEAR + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\AdvertisingInfo -Name Enabled -PropertyType DWord -Value 1 -Force } } @@ -2159,22 +2152,19 @@ function WhatsNewInWindows $Enable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 0 -Force } "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\UserProfileEngagement -Name ScoobeSystemSettingEnabled -PropertyType DWord -Value 1 -Force } } @@ -2712,10 +2702,10 @@ function OpenFileExplorerTo File Explorer mode .PARAMETER Disable - Disable the File Explorer compact mode + Disable File Explorer compact mode .PARAMETER Enable - Enable the File Explorer compact mode + Enable File Explorer compact mode .EXAMPLE FileExplorerCompactMode -Disable @@ -2847,6 +2837,8 @@ function SnapAssist $Enable ) + New-ItemProperty -Path "HKCU:\Control Panel\Desktop" -Name WindowArrangementActive -PropertyType DWord -Value 0 -Force + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -2898,22 +2890,19 @@ function FileTransferDialog $Compact ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force + } + switch ($PSCmdlet.ParameterSetName) { "Detailed" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 1 -Force } "Compact" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager -Name EnthusiastMode -PropertyType DWord -Value 0 -Force } } @@ -2957,6 +2946,11 @@ function RecycleBinDeleteConfirmation $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ConfirmFileDelete -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name ConfirmFileDelete -Type CLEAR + $ShellState = Get-ItemPropertyValue -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name ShellState switch ($PSCmdlet.ParameterSetName) @@ -3012,6 +3006,11 @@ function QuickAccessRecentFiles $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoRecentDocsHistory -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + Set-Policy -Scope User -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoRecentDocsHistory -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3174,6 +3173,11 @@ function TaskbarWidgets return } + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PolicyManager\default\NewsAndInterests\AllowNewsAndInterests -Name value -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Dsh -Name AllowNewsAndInterests -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Dsh -Name AllowNewsAndInterests -Type CLEAR + # We cannot set a value to TaskbarDa, having called any of APIs, except of copying powershell.exe (or any other tricks) with a different name, due to a UCPD driver tracks all executables to block the access to the registry Copy-Item -Path "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe" -Destination "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell_temp.exe" -Force @@ -3253,6 +3257,12 @@ function TaskbarSearch $SearchBox ) + # Remove all policies in order to make changes visible in UI only if it's possible + New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\PolicyManager\default\Search\DisableSearch -Name value -PropertyType DWord -Value 0 -Force + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch, SearchOnTaskbarMode -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name DisableSearch -Type CLEAR + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name SearchOnTaskbarMode -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3312,11 +3322,15 @@ function SearchHighlights $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path "SOFTWARE\Policies\Microsoft\Windows\Windows Search" -Name EnableDynamicContentInWSB -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" { - # Checking whether "Ask Copilot" and "Find results in Web" (Web) were disabled. They also disable Search Highlights automatically + # Checking whether "Ask Copilot" and "Find results in Web" were disabled. They also disable Search Highlights automatically # Due to "Set-StrictMode -Version Latest" we have to use GetValue() $BingSearchEnabled = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search", "BingSearchEnabled", $null)) $DisableSearchBoxSuggestions = ([Microsoft.Win32.Registry]::GetValue("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\Explorer", "DisableSearchBoxSuggestions", $null)) @@ -3335,7 +3349,7 @@ function SearchHighlights } "Show" { - # Enable "Ask Copilot" and "Find results in Web" (Web) icons in Windows Search in order to enable Search Highlights + # Enable "Ask Copilot" and "Find results in Web" icons in Windows Search in order to enable Search Highlights Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Search -Name BingSearchEnabled -Force -ErrorAction Ignore Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer -Name DisableSearchBoxSuggestions -Force -ErrorAction Ignore @@ -3344,57 +3358,6 @@ function SearchHighlights } } -<# - .SYNOPSIS - Copilot button on the taskbar - - .PARAMETER Hide - Hide Copilot button on the taskbar - - .PARAMETER Show - Show Copilot button on the taskbar - - .EXAMPLE - CopilotButton -Hide - - .EXAMPLE - CopilotButton -Show - - .NOTES - Current user -#> -function CopilotButton -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Hide" - )] - [switch] - $Hide, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Show" - )] - [switch] - $Show - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Hide" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 0 -Force - } - "Show" - { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name ShowCopilotButton -PropertyType DWord -Value 1 -Force - } - } -} - <# .SYNOPSIS Task view button on the taskbar @@ -3433,6 +3396,11 @@ function TaskViewButton $Show ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name HideTaskViewButton -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Hide" @@ -3548,19 +3516,24 @@ function TaskbarCombine $Never ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer, HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name NoTaskGrouping -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Always" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 0 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 0 -Force } "Full" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 1 -Force } "Never" { - New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name taskbarGlomLevel -PropertyType DWord -Value 1 -Force + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name TaskbarGlomLevel -PropertyType DWord -Value 2 -Force } } } @@ -3731,32 +3704,29 @@ function ControlPanelView $SmallIcons ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Microsoft\Windows\CurrentVersion\Policies\Explorer -Name ForceClassicControlPanel -Type CLEAR + + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force + } + switch ($PSCmdlet.ParameterSetName) { "Category" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 0 -Force } "LargeIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 0 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } "SmallIcons" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name AllItemsIconView -PropertyType DWord -Value 1 -Force New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel -Name StartupPage -PropertyType DWord -Value 1 -Force } @@ -3903,6 +3873,10 @@ function FirstLogonAnimation $Enable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableFirstLogonAnimation -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4005,6 +3979,8 @@ function ShortcutsSuffix $Enable ) + Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer -Name link -Force -ErrorAction Ignore + switch ($PSCmdlet.ParameterSetName) { "Disable" @@ -4162,6 +4138,11 @@ function AeroShaking $Disable ) + # Remove all policies in order to make changes visible in UI only if it's possible + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Software\Policies\Microsoft\Windows\Explorer -Name NoWindowMinimizingShortcuts -Type CLEAR + switch ($PSCmdlet.ParameterSetName) { "Enable" @@ -4262,7 +4243,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\dark.zip`" -C `"$env:SystemRoot\Cursors\W11_dark_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\dark.zip" -C "$env:SystemRoot\Cursors\W11_dark_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursors Dark Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_dark_v2.2\working.ani" -Force @@ -4353,7 +4334,7 @@ function Cursors } # Extract archive - Start-Process -FilePath "$env:SystemRoot\System32\tar.exe" -ArgumentList "-xf `"$DownloadsFolder\light.zip`" -C `"$env:SystemRoot\Cursors\W11_light_v2.2`" -v" + & "$env:SystemRoot\System32\tar.exe" -xvf "$DownloadsFolder\light.zip" -C "$env:SystemRoot\Cursors\W11_light_v2.2" New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name "(default)" -PropertyType String -Value "W11 Cursor Light Free v2.2 by Jepri Creations" -Force New-ItemProperty -Path "HKCU:\Control Panel\Cursors" -Name AppStarting -PropertyType ExpandString -Value "%SystemRoot%\Cursors\W11_light_v2.2\working.ani" -Force @@ -4568,7 +4549,7 @@ function NavigationPaneExpand { "Disable" { - Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -Force -ErrorAction Ignore + New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced -Name NavPaneExpandToCurrentFolder -PropertyType DWord -Value 0 -Force } "Enable" { @@ -4740,12 +4721,12 @@ public static bool MarkFileDelete (string sourcefile) # Getting the OneDrive folder path and replacing quotes if exist $OneDriveFolder = (Split-Path -Path (Split-Path -Path $OneDriveSetup[0] -Parent)) -replace '"', "" - # Do not restart the File Explorer process automatically if it stops in order to unload libraries + # Do not restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 0 -Force # Kill all explorer instances in case "launch folder windows in a separate process" enabled Get-Process -Name explorer | Stop-Process -Force Start-Sleep -Seconds 3 - # Restart the File Explorer process automatically if it stops in order to unload libraries + # Restart File Explorer process automatically if it stops in order to unload libraries New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" -Name AutoRestartShell -PropertyType DWord -Value 1 -Force # Attempt to unregister FileSyncShell64.dll and remove @@ -4909,22 +4890,19 @@ function StorageSense $Disable ) + if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) + { + New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force + } + switch ($PSCmdlet.ParameterSetName) { "Enable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 1 -Force } "Disable" { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy)) - { - New-Item -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -ItemType Directory -Force - } New-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\StorageSense\Parameters\StoragePolicy -Name 01 -PropertyType DWord -Value 0 -Force } } @@ -5253,57 +5231,6 @@ function AdminApprovalMode } } -<# - .SYNOPSIS - Access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Enable - Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .PARAMETER Disable - Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled - - .EXAMPLE - MappedDrivesAppElevatedAccess -Enable - - .EXAMPLE - MappedDrivesAppElevatedAccess -Disable - - .NOTES - Machine-wide -#> -function MappedDrivesAppElevatedAccess -{ - param - ( - [Parameter( - Mandatory = $true, - ParameterSetName = "Enable" - )] - [switch] - $Enable, - - [Parameter( - Mandatory = $true, - ParameterSetName = "Disable" - )] - [switch] - $Disable - ) - - switch ($PSCmdlet.ParameterSetName) - { - "Enable" - { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -PropertyType DWord -Value 1 -Force - } - "Disable" - { - Remove-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name EnableLinkedConnections -Force -ErrorAction Ignore - } - } -} - <# .SYNOPSIS Delivery Optimization @@ -5922,19 +5849,29 @@ function WindowsCapabilities function InstallButton { - Write-Information -MessageData "" -InformationAction Continue - # Extract the localized "Please wait..." string from shell32.dll - Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose + try + { + Write-Information -MessageData "" -InformationAction Continue + # Extract the localized "Please wait..." string from shell32.dll + Write-Verbose -Message ([WinAPI.GetStrings]::GetString(12612)) -Verbose - [void]$Window.Close() + [void]$Window.Close() - $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} - $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online + $SelectedCapabilities | ForEach-Object -Process {Write-Verbose -Message $_.DisplayName -Verbose} + $SelectedCapabilities | Where-Object -FilterScript {$_.Name -in ((Get-WindowsCapability -Online).Name)} | Add-WindowsCapability -Online - if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + if ([string]$SelectedCapabilities.Name -match "Browser.InternetExplorer") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Warning -Message $Localization.RestartWarning + } + } + catch [System.Runtime.InteropServices.COMException] { - Write-Information -MessageData "" -InformationAction Continue - Write-Warning -Message $Localization.RestartWarning + Write-Warning -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") + Write-Error -Message ($Localization.NoResponse -f "http://tlu.dl.delivery.mp.microsoft.com/filestreamingservice") -ErrorAction SilentlyContinue + + Write-Error -Message ($Localization.RestartFunction -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue } } @@ -5986,18 +5923,6 @@ function WindowsCapabilities { try { - # Check the internet connection - $Parameters = @{ - Name = "dns.msftncsi.com" - Server = "1.1.1.1" - DnsOnly = $true - ErrorAction = "Stop" - } - if ((Resolve-DnsName @Parameters).IPAddress -notcontains "131.107.255.255") - { - return - } - $State = "NotPresent" $ButtonContent = $Localization.Install $ButtonAdd_Click = {InstallButton} @@ -8606,7 +8531,7 @@ public static int UnloadHive(RegistryHives hive, string subKey) } New-ItemProperty -Path "HKCU:\Software\Classes\$Extension\OpenWithProgids" -Name $ProgId -PropertyType None -Value ([byte[]]@()) -Force - # Set the system ProgId to the extension parameters for the File Explorer to the possible options for the assignment, and if absent set the specified ProgId + # Set the system ProgId to the extension parameters for File Explorer to the possible options for the assignment, and if absent set the specified ProgId # Due to "Set-StrictMode -Version Latest" we have to use GetValue() if ($OrigProgID) { @@ -9510,6 +9435,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x86" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x86.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9535,6 +9461,7 @@ function InstallVCRedist Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "Visual C++ Redistributable x64" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\VC_redist.x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9628,6 +9555,7 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait @@ -9685,8 +9613,10 @@ function InstallDotNetRuntimes Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ".NET $LatestRelease" -Verbose + Write-Information -MessageData "" -InformationAction Continue Start-Process -FilePath "$DownloadsFolder\dotnet-runtime-$LatestRelease-win-x64.exe" -ArgumentList "/install /passive /norestart" -Wait + Write-Information -MessageData "" -InformationAction Continue # PowerShell 5.1 (7.5 too) interprets 8.3 file name literally, if an environment variable contains a non-Latin word # https://github.com/PowerShell/PowerShell/issues/21070 @@ -9758,11 +9688,11 @@ function RKNBypass } $Signature = @{ - Namespace = "WinAPI" - Name = "wininet" - Language = "CSharp" - CompilerParameters = $CompilerParameters - MemberDefinition = @" + Namespace = "WinAPI" + Name = "wininet" + Language = "CSharp" + CompilerOptions = $CompilerOptions + MemberDefinition = @" [DllImport("wininet.dll", SetLastError = true, CharSet=CharSet.Auto)] public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength); "@ @@ -9820,7 +9750,7 @@ function PreventEdgeShortcutCreation $Disable ) - if (-not (Get-Package -Name "Microsoft Edge Update" -ProviderName Programs -ErrorAction Ignore)) + if (-not (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore)) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -9829,6 +9759,11 @@ function PreventEdgeShortcutCreation return } + if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) + { + New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force + } + foreach ($Channel in $Channels) { switch ($Channel) @@ -9837,44 +9772,32 @@ function PreventEdgeShortcutCreation { if (Get-Package -Name "Microsoft Edge" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Beta { if (Get-Package -Name "Microsoft Edge Beta" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Dev { if (Get-Package -Name "Microsoft Edge Dev" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } Canary { if (Get-Package -Name "Microsoft Edge Canary" -ProviderName Programs -ErrorAction Ignore) { - if (-not (Test-Path -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate)) - { - New-Item -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Force - } New-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -PropertyType DWord -Value 0 -Force + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type DWORD -Value 3 } } } @@ -9889,6 +9812,11 @@ function PreventEdgeShortcutCreation "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" ) Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\EdgeUpdate -Name $Names -Force -ErrorAction Ignore + + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{56EB18F8-B008-4CBD-B6D2-8C97FE7E9062}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{2CD8A007-E189-409D-A2C8-9AF4EF3C72AA}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{0D50BFEC-CD6A-4F9A-964C-C7416E3ACB10}" -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\EdgeUpdate -Name "CreateDesktopShortcut{65C35B14-6C1D-4122-AC46-7148CC9D6497}" -Type CLEAR } } @@ -10799,22 +10727,19 @@ function CortanaAutostart return } + if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) + { + New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force + } + switch ($PSCmdlet.ParameterSetName) { "Disable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 1 -Force } "Enable" { - if (-not (Test-Path -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId")) - { - New-Item -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Force - } New-ItemProperty -Path "Registry::HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\Microsoft.549981C3F5F10_8wekyb3d8bbwe\CortanaStartupId" -Name State -PropertyType DWord -Value 2 -Force } } @@ -11172,14 +11097,28 @@ function CleanupTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName "Windows Cleanup" -ErrorAction Ignore) @@ -11607,14 +11546,28 @@ function SoftwareDistributionTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName SoftwareDistribution -ErrorAction Ignore) @@ -11921,14 +11874,28 @@ function TempTask { "Register" { - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Remove registry keys if Windows Script Host is disabled - Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\Software\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings", "HKLM:\SOFTWARE\Microsoft\Windows Script Host\Settings" -Name Enabled -Force -ErrorAction Ignore # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + + # Checking whether VBS engine is enabled + if ((Get-WindowsCapability -Online -Name VBSCRIPT*).State -ne "Installed") + { + Write-Information -MessageData "" -InformationAction Continue + Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose + Write-Error -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -ErrorAction SilentlyContinue + + return + } # Checking if we're trying to create the task when it was already created as another user if (Get-ScheduledTask -TaskPath "\Sophia\" -TaskName Temp -ErrorAction Ignore) @@ -12311,7 +12278,7 @@ function PUAppsDetection "Enable" { Set-MpPreference -PUAProtection Enabled - } + } "Disable" { Set-MpPreference -PUAProtection Disabled @@ -12841,7 +12808,8 @@ function WindowsSandbox $Enable ) - if (-not (Get-WindowsEdition -Online | Where-Object -FilterScript {($_.Edition -eq "Professional") -or ($_.Edition -eq "Enterprise") -or ($_.Edition -eq "Education")})) + $WINDOWS_LONG = [WinAPI.Winbrand]::BrandingFormatString("%WINDOWS_LONG%") + if (($WINDOWS_LONG -notmatch "Pro") -and ($WINDOWS_LONG -notmatch "Enterprise") -and ($WINDOWS_LONG -notmatch "Education")) { Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message ($Localization.Skipped -f $MyInvocation.Line.Trim()) -Verbose @@ -13119,7 +13087,8 @@ function LocalSecurityAuthority ) # Remove all policies in order to make changes visible in UI only if it's possible - Set-Policy -Scope Computer -Path Software\Policies\Microsoft\Windows\Explorer -Name RunAsPPL -Type CLEAR + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Force -ErrorAction Ignore + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Type CLEAR switch ($PSCmdlet.ParameterSetName) { @@ -13151,7 +13120,6 @@ function LocalSecurityAuthority "Disable" { Remove-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\Lsa -Name RunAsPPL, RunAsPPLBoot -Force -ErrorAction Ignore - Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\System -Name RunAsPPL -Force -ErrorAction Ignore } } } @@ -13605,7 +13573,7 @@ function UseStoreOpenWith ) # Remove all policies in order to make changes visible in UI only if it's possible - Remove-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Force -ErrorAction Ignore Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name NoUseStoreOpenWith -Type CLEAR switch ($PSCmdlet.ParameterSetName) @@ -14092,11 +14060,15 @@ public static void PostMessage() #region Toast notifications # Persist Sophia notifications to prevent to immediately disappear from Action Center - # Remove registry keys if notifications and Action Center are disabled - Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + # Enable notifications in Action Center + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\Explorer, HKLM:\SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR + Set-Policy -Scope Computer -Path SOFTWARE\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR # Enable notifications Remove-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\PushNotifications -Name ToastEnabled -Force -ErrorAction Ignore + Remove-ItemProperty -Path HKCU:\Software\Policies\Microsoft\Windows\CurrentVersion\PushNotifications -Name NoToastApplicationNotification -Force -ErrorAction Ignore + Set-Policy -Scope User -Path Software\Policies\Microsoft\Windows\Explorer -Name DisableNotificationCenter -Type CLEAR if (-not (Test-Path -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Sophia)) { diff --git a/src/Sophia_Script_for_Windows_11_PowerShell_7/Sophia.ps1 b/src/Sophia_Script_for_Windows_11_PowerShell_7/Sophia.ps1 index c4a03d0ba..92008aec6 100644 --- a/src/Sophia_Script_for_Windows_11_PowerShell_7/Sophia.ps1 +++ b/src/Sophia_Script_for_Windows_11_PowerShell_7/Sophia.ps1 @@ -361,11 +361,11 @@ OpenFileExplorerTo -ThisPC # Открывать проводник для "Быстрый доступ" (значение по умолчанию) # OpenFileExplorerTo -QuickAccess -# Disable the File Explorer compact mode (default value) +# Disable File Explorer compact mode (default value) # Отключить компактный вид проводника (значение по умолчанию) FileExplorerCompactMode -Disable -# Enable the File Explorer compact mode +# Enable File Explorer compact mode # Включить компактный вид проводника # FileExplorerCompactMode -Enable @@ -457,14 +457,6 @@ SearchHighlights -Hide # Показать главное в поиске (значение по умолчанию) # SearchHighlights -Show -# Hide Copilot button on the taskbar -# Скрыть кнопку Copilot с панели задач -CopilotButton -Hide - -# Show Copilot button on the taskbar (default value) -# Отобразить кнопку Copilot на панели задач (значение по умолчанию) -# CopilotButton -Show - # Hide the Task view button from the taskbar # Скрыть кнопку "Представление задач" с панели задач TaskViewButton -Hide @@ -683,14 +675,6 @@ AdminApprovalMode -Never # Настройка уведомления об изменении параметров компьютера: уведомлять меня только при попытках приложений внести изменения в компьютер (значение по умолчанию) # AdminApprovalMode -Default -# Turn on access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled -# Включить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами -MappedDrivesAppElevatedAccess -Enable - -# Turn off access to mapped drives from app running with elevated permissions with Admin Approval Mode enabled (default value) -# Выключить доступ к сетевым дискам при включенном режиме одобрения администратором при доступе из программ, запущенных с повышенными правами (значение по умолчанию) -# MappedDrivesAppElevatedAccess -Disable - # Turn off Delivery Optimization # Выключить оптимизацию доставки DeliveryOptimization -Disable