From f6be74d13661aa044bf321ce369b271a0062c076 Mon Sep 17 00:00:00 2001 From: Dmitry Nefedov <10544660+farag2@users.noreply.github.com> Date: Tue, 7 Jul 2020 13:47:47 +0300 Subject: [PATCH] v4.5.5 07.07.2020 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Windows 10 2004 | 1903/1909 Version ## Updated - Closed #40 & #39 - Comments; - Minor changes. ## Версия для Windows 10 2004 | 1903/1909 ## Обновлено - Закрыты #40 и #39 - Комментарии; - Незначительные изменения. --- Win 10 1903-1909.ps1 | 457 +++++++++++++++++++++---------------------- Win 10 2004.ps1 | 430 ++++++++++++++++++++-------------------- 2 files changed, 446 insertions(+), 441 deletions(-) diff --git a/Win 10 1903-1909.ps1 b/Win 10 1903-1909.ps1 index 115691a5..96eae6d9 100644 --- a/Win 10 1903-1909.ps1 +++ b/Win 10 1903-1909.ps1 @@ -2,8 +2,8 @@ .SYNOPSIS "Windows 10 Setup Script" is a set of tweaks for OS fine-tuning and automating the routine tasks - Version: v4.4.5 - Date: 29.06.2020 + Version: v4.4.6 + Date: 07.07.2020 Copyright (c) 2020 farag & oZ-Zo Thanks to all http://forum.ru-board.com members involved @@ -20,6 +20,10 @@ Running the script is best done on a fresh install because running it on tweaked system may result in errors occurring + Some third-party antiviruses flag this script or its' part as malicious one. This is a false positive due to $EncodedScript variable + You can read more on section "Create a Windows cleaning up task in the Task Scheduler" + You might need to disable tamper protection from your antivirus settings,re-enable it after running the script, and reboot + Check whether the .ps1 file is encoded in UTF-8 with BOM The script can not be executed via PowerShell ISE PowerShell must be run with elevated privileges @@ -2444,33 +2448,6 @@ New-ItemProperty -Path HKCU:\System\GameConfigStore -Name GameDVR_Enabled -Prope # Отключить советы Xbox Game Bar New-ItemProperty -Path HKCU:\Software\Microsoft\GameBar -Name ShowStartupPanel -PropertyType DWord -Value 0 -Force -<# -Uninstall all Xbox related UWP apps from all accounts -App packages will not be installed when new user accounts are created - -Удалить все UWP-приложения, связанные с Xbox, из всех учетных записей -Приложения не будут установлены при создании новых учетных записей -#> -$XboxAppxPackages = @( - # Xbox Identity Provider - # Поставщик удостоверений Xbox - "Microsoft.XboxIdentityProvider" - # Xbox - # Компаньон консоли Xbox - "Microsoft.XboxApp" - # Xbox TCUI - "Microsoft.Xbox.TCUI" - # Xbox Speech To Text Overlay - "Microsoft.XboxSpeechToTextOverlay" - # Xbox Game Bar - "Microsoft.XboxGamingOverlay" - # Xbox Game Bar Plugin - "Microsoft.XboxGameOverlay" -) -$OFS = "|" -Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Where-Object -FilterScript {$_.Name -cmatch $XboxAppxPackages} | Remove-AppxPackage -AllUsers -Verbose -$OFS = " " - # Set "High performance" in graphics performance preference for apps # Установить параметры производительности графики для отдельных приложений на "Высокая производительность" if (Get-CimInstance -ClassName Win32_VideoController | Where-Object -FilterScript {$_.AdapterDACType -ne "Internal" -and $null -ne $_.AdapterDACType}) @@ -2488,51 +2465,55 @@ if (Get-CimInstance -ClassName Win32_VideoController | Where-Object -FilterScrip $Options = "&Add", "&Skip" } $DefaultChoice = 1 - $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - switch ($Result) + do { - "0" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences)) + "0" { - New-Item -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Force - } + if (-not (Test-Path -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences)) + { + New-Item -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Force + } - Add-Type -AssemblyName System.Windows.Forms - $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog - if ($RU) - { - $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" - } - else - { - $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" - } - $OpenFileDialog.InitialDirectory = "${env:ProgramFiles(x86)}" - $OpenFileDialog.Multiselect = $false - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $OpenFileDialog.ShowDialog($tmp) - if ($OpenFileDialog.FileName) - { - New-ItemProperty -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Name $OpenFileDialog.FileName -PropertyType String -Value "GpuPreference=2;" -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" - { - if ($RU) - { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog + if ($RU) + { + $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" + } + else + { + $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" + } + $OpenFileDialog.InitialDirectory = "${env:ProgramFiles(x86)}" + $OpenFileDialog.Multiselect = $false + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $OpenFileDialog.ShowDialog($tmp) + if ($OpenFileDialog.FileName) + { + New-ItemProperty -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Name $OpenFileDialog.FileName -PropertyType String -Value "GpuPreference=2;" -Force + } + $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } + until ($Result -eq 1) } #endregion Gaming @@ -2802,46 +2783,49 @@ else $Options = "&Add a protected folder", "&Skip" } $DefaultChoice = 1 -$Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) -switch ($Result) +do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog - if ($RU) - { - $FolderBrowserDialog.Description = "Выберите папку" - } - else - { - $FolderBrowserDialog.Description = "Select a folder" - } - $FolderBrowserDialog.RootFolder = "MyComputer" - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $FolderBrowserDialog.ShowDialog($tmp) - if ($FolderBrowserDialog.SelectedPath) - { - Set-MpPreference -EnableControlledFolderAccess Enabled - Add-MpPreference -ControlledFolderAccessProtectedFolders $FolderBrowserDialog.SelectedPath -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog + if ($RU) + { + $FolderBrowserDialog.Description = "Выберите папку" + } + else + { + $FolderBrowserDialog.Description = "Select a folder" + } + $FolderBrowserDialog.RootFolder = "MyComputer" + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $FolderBrowserDialog.ShowDialog($tmp) + if ($FolderBrowserDialog.SelectedPath) + { + Set-MpPreference -EnableControlledFolderAccess Enabled + Add-MpPreference -ControlledFolderAccessProtectedFolders $FolderBrowserDialog.SelectedPath -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } +until ($Result -eq 1) # Allow an app through Controlled folder access # Разрешить работу приложения через контролируемый доступ к папкам @@ -2860,46 +2844,49 @@ if ((Get-MpPreference).EnableControlledFolderAccess -eq 1) $Options = "&Add a protected folder", "&Skip" } $DefaultChoice = 1 - $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - switch ($Result) + do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog - if ($RU) - { - $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" - } - else - { - $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" - } - $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" - $OpenFileDialog.Multiselect = $false - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $OpenFileDialog.ShowDialog($tmp) - if ($OpenFileDialog.FileName) - { - Add-MpPreference -ControlledFolderAccessAllowedApplications $OpenFileDialog.FileName -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog + if ($RU) + { + $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" + } + else + { + $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" + } + $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" + $OpenFileDialog.Multiselect = $false + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $OpenFileDialog.ShowDialog($tmp) + if ($OpenFileDialog.FileName) + { + Add-MpPreference -ControlledFolderAccessAllowedApplications $OpenFileDialog.FileName -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } + until ($Result -eq 1) } # Add exclusion folder from Windows Defender Antivirus scanning @@ -2917,45 +2904,48 @@ else $Options = "&Exclude folder", "&Skip" } $DefaultChoice = 1 -$Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) -switch ($Result) +do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog - if ($RU) - { - $FolderBrowserDialog.Description = "Выберите папку" - } - else - { - $FolderBrowserDialog.Description = "Select a folder" - } - $FolderBrowserDialog.RootFolder = "MyComputer" - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $FolderBrowserDialog.ShowDialog($tmp) - if ($FolderBrowserDialog.SelectedPath) - { - Add-MpPreference -ExclusionPath $FolderBrowserDialog.SelectedPath -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog + if ($RU) + { + $FolderBrowserDialog.Description = "Выберите папку" + } + else + { + $FolderBrowserDialog.Description = "Select a folder" + } + $FolderBrowserDialog.RootFolder = "MyComputer" + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $FolderBrowserDialog.ShowDialog($tmp) + if ($FolderBrowserDialog.SelectedPath) + { + Add-MpPreference -ExclusionPath $FolderBrowserDialog.SelectedPath -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } +until ($Result -eq 1) # Add exclusion file from Windows Defender Antivirus scanning # Добавить файл в список исключений сканирования Windows Defender @@ -2972,46 +2962,49 @@ else $Options = "&Exclude file", "&Skip" } $DefaultChoice = 1 -$Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) -switch ($Result) +do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog - if ($RU) - { - $OpenFileDialog.Filter = "Все файлы (*.*)|*.*" - } - else - { - $OpenFileDialog.Filter = "All Files (*.*)|*.*" - } - $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" - $OpenFileDialog.Multiselect = $false - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $OpenFileDialog.ShowDialog($tmp) - if ($OpenFileDialog.FileName) - { - Add-MpPreference -ExclusionPath $OpenFileDialog.FileName -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog + if ($RU) + { + $OpenFileDialog.Filter = "Все файлы (*.*)|*.*" + } + else + { + $OpenFileDialog.Filter = "All Files (*.*)|*.*" + } + $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" + $OpenFileDialog.Multiselect = $false + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $OpenFileDialog.ShowDialog($tmp) + if ($OpenFileDialog.FileName) + { + Add-MpPreference -ExclusionPath $OpenFileDialog.FileName -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } +until ($Result -eq 1) # Turn on Windows Defender Exploit Guard network protection # Включить защиту сети в Windows Defender @@ -3036,64 +3029,60 @@ New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Security Health\State" # Turn on events auditing generated when a process is created or starts # Включить аудит событий, возникающих при создании или запуске процесса auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable -$ProcessCreation = $true -# Include command line in process creation events -# Включать командную строку в событиях создания процесса +<# +Include command line in process creation events +In order this feature to work events auditing must be enabled + +Включать командную строку в событиях создания процесса +Необходимо включить аудит событий, чтобы работала данная опция +#> if ($RU) { $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 } +New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType DWord -Value 1 -Force + +<# +Create "Process Creation" Event Viewer Custom View +In order this feature to work events auditing and command line in process creation events must be enabled -if ($ProcessCreation) +Создать настаиваемое представление "Создание процесса" в Просмотре событий +Необходимо включить аудит событий и командную строку в событиях создания процесса, чтобы работала данная опция +#> +$XML = @" + + + + + + + Process Creation + Process Creation and Command-line Auditing Events + + + + + + + + +"@ +if (-not (Test-Path -Path "$env:ProgramData\Microsoft\Event Viewer\Views")) { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType DWord -Value 1 -Force - $ProcessCreationIncludeCmdLine_Enabled = $true + New-Item -Path "$env:ProgramData\Microsoft\Event Viewer\Views" -ItemType Directory -Force } +$ProcessCreationFilePath = "$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml" +# Saving ProcessCreation.xml in UTF-8 encoding +# Сохраняем ProcessCreation.xml в кодировке UTF-8 +Set-Content -Value (New-Object System.Text.UTF8Encoding).GetBytes($XML) -Encoding Byte -Path $ProcessCreationFilePath -Force -# Create "Process Creation" Event Viewer Custom View -# Создать настаиваемое представление "Создание процесса" в Просмотре событий if ($RU) { - $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 -} - -if ($ProcessCreation -and $ProcessCreationIncludeCmdLine_Enabled) -{ - $XML = @" - - - - - - - Process Creation - Process Creation and Command-line Auditing Events - - - - - - - - -"@ - if (-not (Test-Path -Path "$env:ProgramData\Microsoft\Event Viewer\Views")) - { - New-Item -Path "$env:ProgramData\Microsoft\Event Viewer\Views" -ItemType Directory -Force - } - $ProcessCreationFilePath = "$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml" - # Saving ProcessCreation.xml in UTF-8 encoding - # Сохраняем ProcessCreation.xml в кодировке UTF-8 - Set-Content -Value (New-Object System.Text.UTF8Encoding).GetBytes($XML) -Encoding Byte -Path $ProcessCreationFilePath -Force - - if ($RU) - { - [xml]$XML = Get-Content -Path $ProcessCreationFilePath - $XML.ViewerConfig.QueryConfig.QueryNode.Name = "Создание процесса" - $XML.ViewerConfig.QueryConfig.QueryNode.Description = "События содания нового процесса и аудит командной строки" - $xml.Save("$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml") - } + [xml]$XML = Get-Content -Path $ProcessCreationFilePath + $XML.ViewerConfig.QueryConfig.QueryNode.Name = "Создание процесса" + $XML.ViewerConfig.QueryConfig.QueryNode.Description = "События содания нового процесса и аудит командной строки" + $xml.Save("$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml") } # Turn on logging for all Windows PowerShell modules diff --git a/Win 10 2004.ps1 b/Win 10 2004.ps1 index 4c179c9c..ae2ed25d 100644 --- a/Win 10 2004.ps1 +++ b/Win 10 2004.ps1 @@ -2,8 +2,8 @@ .SYNOPSIS "Windows 10 Setup Script" is a set of tweaks for OS fine-tuning and automating the routine tasks - Version: v4.5.4 - Date: 29.06.2020 + Version: v4.5.5 + Date: 07.07.2020 Copyright (c) 2020 farag & oZ-Zo Thanks to all http://forum.ru-board.com members involved @@ -20,6 +20,10 @@ Running the script is best done on a fresh install because running it on tweaked system may result in errors occurring + Some third-party antiviruses flag this script or its' part as malicious one. This is a false positive due to $EncodedScript variable + You can read more on section "Create a Windows cleaning up task in the Task Scheduler" + You might need to disable tamper protection from your antivirus settings,re-enable it after running the script, and reboot + Check whether the .ps1 file is encoded in UTF-8 with BOM The script can not be executed via PowerShell ISE PowerShell must be run with elevated privileges @@ -2458,51 +2462,55 @@ if (Get-CimInstance -ClassName Win32_VideoController | Where-Object -FilterScrip $Options = "&Add", "&Skip" } $DefaultChoice = 1 - $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - switch ($Result) + do { - "0" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if (-not (Test-Path -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences)) + "0" { - New-Item -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Force - } + if (-not (Test-Path -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences)) + { + New-Item -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Force + } - Add-Type -AssemblyName System.Windows.Forms - $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog - if ($RU) - { - $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" - } - else - { - $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" - } - $OpenFileDialog.InitialDirectory = "${env:ProgramFiles(x86)}" - $OpenFileDialog.Multiselect = $false - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $OpenFileDialog.ShowDialog($tmp) - if ($OpenFileDialog.FileName) - { - New-ItemProperty -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Name $OpenFileDialog.FileName -PropertyType String -Value "GpuPreference=2;" -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" - { - if ($RU) - { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog + if ($RU) + { + $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" + } + else + { + $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" + } + $OpenFileDialog.InitialDirectory = "${env:ProgramFiles(x86)}" + $OpenFileDialog.Multiselect = $false + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $OpenFileDialog.ShowDialog($tmp) + if ($OpenFileDialog.FileName) + { + New-ItemProperty -Path HKCU:\Software\Microsoft\DirectX\UserGpuPreferences -Name $OpenFileDialog.FileName -PropertyType String -Value "GpuPreference=2;" -Force + } + $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } + until ($Result -eq 1) } <# @@ -2795,46 +2803,49 @@ else $Options = "&Add a protected folder", "&Skip" } $DefaultChoice = 1 -$Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) -switch ($Result) +do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog - if ($RU) - { - $FolderBrowserDialog.Description = "Выберите папку" - } - else - { - $FolderBrowserDialog.Description = "Select a folder" - } - $FolderBrowserDialog.RootFolder = "MyComputer" - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $FolderBrowserDialog.ShowDialog($tmp) - if ($FolderBrowserDialog.SelectedPath) - { - Set-MpPreference -EnableControlledFolderAccess Enabled - Add-MpPreference -ControlledFolderAccessProtectedFolders $FolderBrowserDialog.SelectedPath -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog + if ($RU) + { + $FolderBrowserDialog.Description = "Выберите папку" + } + else + { + $FolderBrowserDialog.Description = "Select a folder" + } + $FolderBrowserDialog.RootFolder = "MyComputer" + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $FolderBrowserDialog.ShowDialog($tmp) + if ($FolderBrowserDialog.SelectedPath) + { + Set-MpPreference -EnableControlledFolderAccess Enabled + Add-MpPreference -ControlledFolderAccessProtectedFolders $FolderBrowserDialog.SelectedPath -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } +until ($Result -eq 1) # Allow an app through Controlled folder access # Разрешить работу приложения через контролируемый доступ к папкам @@ -2853,46 +2864,49 @@ if ((Get-MpPreference).EnableControlledFolderAccess -eq 1) $Options = "&Add a protected folder", "&Skip" } $DefaultChoice = 1 - $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - switch ($Result) + do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog - if ($RU) - { - $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" - } - else - { - $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" - } - $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" - $OpenFileDialog.Multiselect = $false - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $OpenFileDialog.ShowDialog($tmp) - if ($OpenFileDialog.FileName) - { - Add-MpPreference -ControlledFolderAccessAllowedApplications $OpenFileDialog.FileName -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog + if ($RU) + { + $OpenFileDialog.Filter = "*.exe|*.exe|Все файлы (*.*)|*.*" + } + else + { + $OpenFileDialog.Filter = "*.exe|*.exe|All Files (*.*)|*.*" + } + $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" + $OpenFileDialog.Multiselect = $false + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $OpenFileDialog.ShowDialog($tmp) + if ($OpenFileDialog.FileName) + { + Add-MpPreference -ControlledFolderAccessAllowedApplications $OpenFileDialog.FileName -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } + until ($Result -eq 1) } # Add exclusion folder from Microsoft Defender Antivirus scanning @@ -2910,45 +2924,48 @@ else $Options = "&Exclude folder", "&Skip" } $DefaultChoice = 1 -$Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) -switch ($Result) +do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog - if ($RU) - { - $FolderBrowserDialog.Description = "Выберите папку" - } - else - { - $FolderBrowserDialog.Description = "Select a folder" - } - $FolderBrowserDialog.RootFolder = "MyComputer" - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $FolderBrowserDialog.ShowDialog($tmp) - if ($FolderBrowserDialog.SelectedPath) - { - Add-MpPreference -ExclusionPath $FolderBrowserDialog.SelectedPath -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $FolderBrowserDialog = New-Object -TypeName System.Windows.Forms.FolderBrowserDialog + if ($RU) + { + $FolderBrowserDialog.Description = "Выберите папку" + } + else + { + $FolderBrowserDialog.Description = "Select a folder" + } + $FolderBrowserDialog.RootFolder = "MyComputer" + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $FolderBrowserDialog.ShowDialog($tmp) + if ($FolderBrowserDialog.SelectedPath) + { + Add-MpPreference -ExclusionPath $FolderBrowserDialog.SelectedPath -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } +until ($Result -eq 1) # Add exclusion file from Microsoft Defender Antivirus scanning # Добавить файл в список исключений сканирования Microsoft Defender @@ -2965,46 +2982,49 @@ else $Options = "&Exclude file", "&Skip" } $DefaultChoice = 1 -$Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) -switch ($Result) +do { - "0" - { - Add-Type -AssemblyName System.Windows.Forms - $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog - if ($RU) - { - $OpenFileDialog.Filter = "Все файлы (*.*)|*.*" - } - else - { - $OpenFileDialog.Filter = "All Files (*.*)|*.*" - } - $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" - $OpenFileDialog.Multiselect = $false - # Focus on open file dialog - # Перевести фокус на диалог открытия файла - $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} - $OpenFileDialog.ShowDialog($tmp) - if ($OpenFileDialog.FileName) - { - Add-MpPreference -ExclusionPath $OpenFileDialog.FileName -Force - } - $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) - } - "1" + $Result = $Host.UI.PromptForChoice($Title, $Message, $Options, $DefaultChoice) + switch ($Result) { - if ($RU) + "0" { - Write-Verbose -Message "Пропущено" -Verbose + Add-Type -AssemblyName System.Windows.Forms + $OpenFileDialog = New-Object -TypeName System.Windows.Forms.OpenFileDialog + if ($RU) + { + $OpenFileDialog.Filter = "Все файлы (*.*)|*.*" + } + else + { + $OpenFileDialog.Filter = "All Files (*.*)|*.*" + } + $OpenFileDialog.InitialDirectory = "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" + $OpenFileDialog.Multiselect = $false + # Focus on open file dialog + # Перевести фокус на диалог открытия файла + $tmp = New-Object -TypeName System.Windows.Forms.Form -Property @{TopMost = $true} + $OpenFileDialog.ShowDialog($tmp) + if ($OpenFileDialog.FileName) + { + Add-MpPreference -ExclusionPath $OpenFileDialog.FileName -Force + } } - else + "1" { - Write-Verbose -Message "Skipped" -Verbose + if ($RU) + { + Write-Verbose -Message "Пропущено" -Verbose + } + else + { + Write-Verbose -Message "Skipped" -Verbose + } } } } +until ($Result -eq 1) # Turn on Microsoft Defender Exploit Guard network protection # Включить защиту сети в Microsoft Defender Exploit Guard @@ -3029,64 +3049,60 @@ New-ItemProperty -Path "HKCU:\Software\Microsoft\Windows Security Health\State" # Turn on events auditing generated when a process is created or starts # Включить аудит событий, возникающих при создании или запуске процесса auditpol /set /subcategory:"{0CCE922B-69AE-11D9-BED3-505054503030}" /success:enable /failure:enable -$ProcessCreation = $true -# Include command line in process creation events -# Включать командную строку в событиях создания процесса +<# +Include command line in process creation events +In order this feature to work events auditing must be enabled + +Включать командную строку в событиях создания процесса +Необходимо включить аудит событий, чтобы работала данная опция +#> if ($RU) { $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 } +New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType DWord -Value 1 -Force + +<# +Create "Process Creation" Event Viewer Custom View +In order this feature to work events auditing and command line in process creation events must be enabled -if ($ProcessCreation) +Создать настаиваемое представление "Создание процесса" в Просмотре событий +Необходимо включить аудит событий и командную строку в событиях создания процесса, чтобы работала данная опция +#> +$XML = @" + + + + + + + Process Creation + Process Creation and Command-line Auditing Events + + + + + + + + +"@ +if (-not (Test-Path -Path "$env:ProgramData\Microsoft\Event Viewer\Views")) { - New-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit -Name ProcessCreationIncludeCmdLine_Enabled -PropertyType DWord -Value 1 -Force - $ProcessCreationIncludeCmdLine_Enabled = $true + New-Item -Path "$env:ProgramData\Microsoft\Event Viewer\Views" -ItemType Directory -Force } +$ProcessCreationFilePath = "$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml" +# Saving ProcessCreation.xml in UTF-8 encoding +# Сохраняем ProcessCreation.xml в кодировке UTF-8 +Set-Content -Value (New-Object System.Text.UTF8Encoding).GetBytes($XML) -Encoding Byte -Path $ProcessCreationFilePath -Force -# Create "Process Creation" Event Viewer Custom View -# Создать настаиваемое представление "Создание процесса" в Просмотре событий if ($RU) { - $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8 -} - -if ($ProcessCreation -and $ProcessCreationIncludeCmdLine_Enabled) -{ - $XML = @" - - - - - - - Process Creation - Process Creation and Command-line Auditing Events - - - - - - - - -"@ - if (-not (Test-Path -Path "$env:ProgramData\Microsoft\Event Viewer\Views")) - { - New-Item -Path "$env:ProgramData\Microsoft\Event Viewer\Views" -ItemType Directory -Force - } - $ProcessCreationFilePath = "$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml" - # Saving ProcessCreation.xml in UTF-8 encoding - # Сохраняем ProcessCreation.xml в кодировке UTF-8 - Set-Content -Value (New-Object System.Text.UTF8Encoding).GetBytes($XML) -Encoding Byte -Path $ProcessCreationFilePath -Force - - if ($RU) - { - [xml]$XML = Get-Content -Path $ProcessCreationFilePath - $XML.ViewerConfig.QueryConfig.QueryNode.Name = "Создание процесса" - $XML.ViewerConfig.QueryConfig.QueryNode.Description = "События содания нового процесса и аудит командной строки" - $xml.Save("$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml") - } + [xml]$XML = Get-Content -Path $ProcessCreationFilePath + $XML.ViewerConfig.QueryConfig.QueryNode.Name = "Создание процесса" + $XML.ViewerConfig.QueryConfig.QueryNode.Description = "События содания нового процесса и аудит командной строки" + $xml.Save("$env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml") } # Turn on logging for all Windows PowerShell modules