@ -2,8 +2,8 @@
. SYNOPSIS
Sophia Script is a PowerShell module for Windows 10 & Windows 11 fine-tuning and automating the routine tasks
Version : v5 . 12 . 2
Date : 25 . 08 . 2021
Version : v5 . 12 . 3
Date : 19 . 09 . 2021
Copyright ( c ) 2014 – 2021 farag
Copyright ( c ) 2019 – 2021 farag & Inestic
@ -31,15 +31,15 @@
https : / / t . me / sophianews
https : / / t . me / sophia_chat
. LINK Authors
https : / / github . com / farag2
https : / / github . com / Inestic
. LINK
. NOTES
https : / / forum . ru-board . com / topic . cgi ? forum = 62 & topic = 30617 #15
https : / / habr . com / company / skillfactory / blog / 553800 /
https : / / forums . mydigitallife . net / threads / powershell-windows - 10 -sophia -script . 81675 /
https : / / www . reddit . com / r / PowerShell / comments / go2n5v / powershell_script_setup_windows_10 /
. LINK Authors
https : / / github . com / farag2
https : / / github . com / Inestic
#>
#region Checkings
@ -85,10 +85,18 @@ function Checkings
$Version = Get-ItemPropertyValue -Path " HKLM:\SOFTWARE\Microsoft\Windows nt\CurrentVersion " -Name UBR
Write-Warning -Message ( $Localization . UpdateWarning -f $Version )
# Check for updates
# Receive updates for other Microsoft products when you update Windows
( New-Object -ComObject Microsoft . Update . ServiceManager ) . AddService2 ( " 7971f918-a847-4430-9279-4a52d1efe18d " , 7 , " " )
Start-Sleep -Seconds 1
# Open the "Windows Update" page
Start-Process -FilePath " ms-settings:windowsupdate-action "
Start-Sleep -Seconds 3
Start-Process -FilePath " ms-settings:windowsupdate-optionalupdates "
Start-Sleep -Seconds 1
# Trigger Windows Update for detecting new updates
( New-Object -ComObject Microsoft . Update . AutoUpdate ) . DetectNow ( )
exit
}
@ -146,13 +154,26 @@ function Checkings
exit
}
# Check whether there are libraries in the Libraries folder
$Libraries = @ ( " $ PSScriptRoot\..\Libraries\Microsoft.Windows.SDK.NET.dll " , " $ PSScriptRoot\..\Libraries\WinRT.Runtime.dll " )
if ( ( $Libraries | Test-Path ) -contains $false )
{
Write-Warning -Message $Localization . PowerShellLibraries
Start-Sleep -Seconds 5
Start-Process -FilePath " https://github.com/farag2/Sophia-Script-for-Windows/releases/latest "
exit
}
# Check if the current module version is the latest one
try
{
[Net.ServicePointManager] :: SecurityProtocol = [Net.SecurityProtocolType] :: Tls12
# https://github.com/farag2/Sophia-Script-for-Windows/blob/master/sophia_script_versions.json
$LatestRelease = ( Invoke-RestMethod -Uri " https://raw.githubusercontent.com/farag2/Sophia-Script-for-Windows/master/sophia_script_versions.json " -UseBasicParsing ) . Sophia_Script_Windows_10_PowerShell_7
$LatestRelease = ( Invoke-RestMethod -Uri " https://raw.githubusercontent.com/farag2/Sophia-Script-for-Windows/master/sophia_script_versions.json " -UseBasicParsing ) . Sophia_Script_Windows_10_PowerShell_7
$CurrentRelease = ( Get-Module -Name Sophia ) . Version . ToString ( )
switch ( [System.Version] $LatestRelease -gt [System.Version] $CurrentRelease )
{
@ -174,7 +195,7 @@ function Checkings
}
# Unblock all files in the script folder by removing the Zone.Identifier alternate data stream with a value of "3"
Get-ChildItem -Path $PSScriptRoot -Recurse -Force | Unblock-File
Get-ChildItem -Path $PSScriptRoot \ . . \ -File -Recurse -Force | Unblock-File
# Display a warning message about whether a user has customized the preset file
if ( $Warning )
@ -230,12 +251,12 @@ function Checkings
#endregion Checkings
#region Protection
# Enable script logging. The log will be being recorded into the script folder
# Enable script logging. The log will be being recorded into the script root folder
# To stop logging just close the console or type "Stop-Transcript"
function Logging
{
$TrascriptFilename = " Log- $( ( Get-Date ) . ToString ( " dd.MM.yyyy-HH-mm " ) ) "
Start-Transcript -Path $PSScriptRoot \ $TrascriptFilename . txt -Force
Start-Transcript -Path $PSScriptRoot \ . . \ $TrascriptFilename . txt -Force
}
# Create a restore point for the system drive
@ -512,7 +533,7 @@ function FeedbackFrequency
}
" Automatically "
{
Remove-Item -Path HKCU : \ SOFTWARE \ Microsoft \ Siuf \ Rules -Force -ErrorAction SilentlyContinu e
Remove-Item -Path HKCU : \ SOFTWARE \ Microsoft \ Siuf \ Rules -Force -ErrorAction Ignor e
}
}
}
@ -799,10 +820,13 @@ function ScheduledTasks
if ( -not ( $Tasks ) )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . NoData -Verbose
return
}
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . DialogBoxOpening -Verbose
#region Sendkey function
@ -812,9 +836,9 @@ function ScheduledTasks
Add-Type -AssemblyName System . Windows . Forms
$SetForegroundWindow = @ {
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " user32.dll " ) ]
public static extern bool ShowWindowAsync ( IntPtr hWnd , int nCmdShow ) ;
@ -2085,7 +2109,7 @@ function 3DObjects
}
" Show "
{
Remove-ItemProperty -Path " HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag " -Name ThisPCPolicy -Force -ErrorAction SilentlyContinu e
Remove-ItemProperty -Path " HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FolderDescriptions\{31C0DD25-9439-4F12-BF41-7FF4EDA38722}\PropertyBag " -Name ThisPCPolicy -Force -ErrorAction Ignor e
}
}
@ -2718,9 +2742,9 @@ function UnpinTaskbarShortcuts
# Extract strings from shell32.dll using its' number
$Signature = @ {
Namespace = " WinAPI "
Name = " GetStr "
Language = " CSharp "
Namespace = " WinAPI "
Name = " GetStr "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " kernel32.dll " , CharSet = CharSet . Auto ) ]
public static extern IntPtr GetModuleHandle ( string lpModuleName ) ;
@ -2754,9 +2778,8 @@ public static string GetString(uint strId)
if ( Test-Path -Path " $ env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar\Microsoft Edge.lnk " )
{
# Call the shortcut context menu item
$Shell = New-Object -ComObject Shell . Application
$Folder = $Shell . NameSpace ( " $ env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar " )
$Shortcut = $Folder . ParseName ( " Microsoft Edge.lnk " )
$Shell = ( New-Object -ComObject Shell . Application ) . NameSpace ( " $ env:AppData\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBar " )
$Shortcut = $Shell . ParseName ( " Microsoft Edge.lnk " )
$Shortcut . Verbs ( ) | Where-Object -FilterScript { $_ . Name -eq $LocalizedString } | ForEach-Object -Process { $_ . DoIt ( ) }
}
}
@ -2836,7 +2859,7 @@ function ControlPanelView
switch ( $PSCmdlet . ParameterSetName )
{
" Category "
" Category "
{
if ( -not ( Test-Path -Path HKCU : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ControlPanel ) )
{
@ -3018,11 +3041,7 @@ function NewAppInstalledNotification
}
" Show "
{
if ( -not ( Test-Path -Path HKLM : \ SOFTWARE \ Policies \ Microsoft \ Windows \ Explorer ) )
{
New-Item -Path HKLM : \ SOFTWARE \ Policies \ Microsoft \ Windows \ Explorer -Force
}
New-ItemProperty -Path HKLM : \ SOFTWARE \ Policies \ Microsoft \ Windows \ Explorer -Name NoNewAppAlert -PropertyType DWord -Value 0 -Force
Remove-ItemProperty -Path HKLM : \ SOFTWARE \ Policies \ Microsoft \ Windows \ Explorer -Name NoNewAppAlert -Force
}
}
}
@ -3069,11 +3088,11 @@ function FirstLogonAnimation
{
" Disable "
{
New-ItemProperty -Path HKLM : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -Name EnableFirstLogonAnimation -PropertyType DWord -Value 0 -Force
New-ItemProperty -Path " HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon " -Name EnableFirstLogonAnimation -PropertyType DWord -Value 0 -Force
}
" Enable "
{
New-ItemProperty -Path HKLM : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -Name EnableFirstLogonAnimation -PropertyType DWord -Value 1 -Force
New-ItemProperty -Path " HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon " -Name EnableFirstLogonAnimation -PropertyType DWord -Value 1 -Force
}
}
}
@ -3514,6 +3533,7 @@ function OneDrive
[string] $UninstallString = $Uninstall . Meta . UninstallString
if ( $UninstallString )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . OneDriveUninstalling -Verbose
Stop-Process -Name OneDrive -Force -ErrorAction Ignore
@ -3542,9 +3562,9 @@ function OneDrive
# The system does not move the file until the operating system is restarted
# The system moves the file immediately after AUTOCHK is executed, but before creating any paging files
$Signature = @ {
Namespace = " WinAPI "
Name = " DeleteFiles "
Language = " CSharp "
Namespace = " WinAPI "
Name = " DeleteFiles "
Language = " CSharp "
MemberDefinition = @ "
public enum MoveFileFlags
{
@ -3653,24 +3673,39 @@ public static bool MarkFileDelete (string sourcefile)
{
if ( Test-Path -Path $env:SystemRoot \ SysWOW64 \ OneDriveSetup . exe )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . OneDriveInstalling -Verbose
Start-Process -FilePath $env:SystemRoot \ SysWOW64 \ OneDriveSetup . exe
}
else
{
# Downloading the latest OneDrive
try
{
# Downloading the latest OneDrive installer x64
if ( ( Invoke-WebRequest -Uri https : / / www . google . com -UseBasicParsing -DisableKeepAlive -Method Head ) . StatusDescription )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . OneDriveDownloading -Verbose
# Parse XML to get the URL
# https://go.microsoft.com/fwlink/p/?LinkID=844652
$Parameters = @ {
Uri = " https://g.live.com/1rewlive5skydrive/OneDriveProduction "
UseBasicParsing = $true
Verbose = $true
}
$Content = Invoke-RestMethod @Parameters
# Remove invalid chars
[xml] $OneDriveXML = $Content -replace "  " , " "
$OneDriveURL = ( $OneDriveXML ) . root . update . amd64binary . url [ - 1 ]
$DownloadsFolder = Get-ItemPropertyValue -Path " HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders " -Name " {374DE290-123F-4565-9164-39C4925E467B} "
$Parameters = @ {
Uri = " https://go.microsoft.com/fwlink/p/?LinkID=2121808 "
OutFile = " $ DownloadsFolder\OneDriveSetup.exe "
Uri = $OneDriveURL
OutFile = " $ DownloadsFolder\OneDriveSetup.exe "
SslProtocol = " Tls12 "
Verbose = [switch] :: Present
Verbose = $true
}
Invoke-WebRequest @Parameters
@ -3930,10 +3965,10 @@ function Hibernation
The % TEMP % environment variable path
. PARAMETER SystemDrive
Change the % TEMP % environment variable path to " %SystemDrive%\Temp "
Change the % TEMP % environment variable path to % SystemDrive % \ Temp
. PARAMETER Default
Change the % TEMP % environment variable path to " %LOCALAPPDATA%\Temp "
Change the % TEMP % environment variable path to % LOCALAPPDATA % \ Temp
. EXAMPLE
TempFolder -SystemDrive
@ -4002,9 +4037,9 @@ function TempFolder
# The system does not move the file until the operating system is restarted
# The system moves the file immediately after AUTOCHK is executed, but before creating any paging files
$Signature = @ {
Namespace = " WinAPI "
Name = " DeleteFiles "
Language = " CSharp "
Namespace = " WinAPI "
Name = " DeleteFiles "
Language = " CSharp "
MemberDefinition = @ "
public enum MoveFileFlags
{
@ -4046,10 +4081,10 @@ Unregister-ScheduledTask -TaskName SymbolicLink -Confirm:`$false
" @
# Create a temporary scheduled task to create a symbolic link to the %SystemDrive%\Temp folder
$Action = New-ScheduledTaskAction -Execute powershell . exe -Argument " -WindowStyle Hidden -Command $ SymbolicLinkTask "
$Trigger = New-ScheduledTaskTrigger -AtLogon -User $env:USERNAME
$Settings = New-ScheduledTaskSettingsSet -Compatibility Win8
$Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
$Action = New-ScheduledTaskAction -Execute powershell . exe -Argument " -WindowStyle Hidden -Command $ SymbolicLinkTask "
$Trigger = New-ScheduledTaskTrigger -AtLogon -User $env:USERNAME
$Settings = New-ScheduledTaskSettingsSet -Compatibility Win8
$Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
$Parameters = @ {
TaskName = " SymbolicLink "
Principal = $Principal
@ -4066,7 +4101,7 @@ Unregister-ScheduledTask -TaskName SymbolicLink -Confirm:`$false
}
#region main
# Change the %TEMP% environment variable path to " %LOCALAPPDATA%\Temp"
# Change the %TEMP% environment variable path to %LOCALAPPDATA%\Temp
[Environment] :: SetEnvironmentVariable ( " TMP " , " $ env:SystemDrive\Temp " , " User " )
[Environment] :: SetEnvironmentVariable ( " TMP " , " $ env:SystemDrive\Temp " , " Machine " )
[Environment] :: SetEnvironmentVariable ( " TMP " , " $ env:SystemDrive\Temp " , " Process " )
@ -4122,9 +4157,9 @@ Unregister-ScheduledTask -TaskName SymbolicLink -Confirm:`$false
# The system does not move the file until the operating system is restarted
# The system moves the file immediately after AUTOCHK is executed, but before creating any paging files
$Signature = @ {
Namespace = " WinAPI "
Name = " DeleteFiles "
Language = " CSharp "
Namespace = " WinAPI "
Name = " DeleteFiles "
Language = " CSharp "
MemberDefinition = @ "
public enum MoveFileFlags
{
@ -4164,10 +4199,10 @@ Unregister-ScheduledTask -TaskName TemporaryTask -Confirm:`$false
" @
# Create a temporary scheduled task to clean up the temporary folder
$Action = New-ScheduledTaskAction -Execute powershell . exe -Argument " -WindowStyle Hidden -Command $ TempFolderCleanupTask "
$Trigger = New-ScheduledTaskTrigger -AtLogon -User $env:USERNAME
$Settings = New-ScheduledTaskSettingsSet -Compatibility Win8
$Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
$Action = New-ScheduledTaskAction -Execute powershell . exe -Argument " -WindowStyle Hidden -Command $ TempFolderCleanupTask "
$Trigger = New-ScheduledTaskTrigger -AtLogon -User $env:USERNAME
$Settings = New-ScheduledTaskSettingsSet -Compatibility Win8
$Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
$Parameters = @ {
TaskName = " TemporaryTask "
Principal = $Principal
@ -4179,7 +4214,7 @@ Unregister-ScheduledTask -TaskName TemporaryTask -Confirm:`$false
}
#region main
# Change the %TEMP% environment variable path to " %LOCALAPPDATA%\Temp"
# Change the %TEMP% environment variable path to %LOCALAPPDATA%\Temp
[Environment] :: SetEnvironmentVariable ( " TMP " , " $ env:LOCALAPPDATA\Temp " , " User " )
[Environment] :: SetEnvironmentVariable ( " TMP " , " $ env:SystemRoot\TEMP " , " Machine " )
[Environment] :: SetEnvironmentVariable ( " TMP " , " $ env:LOCALAPPDATA\Temp " , " Process " )
@ -4397,7 +4432,7 @@ function MappedDrivesAppElevatedAccess
}
" Disable "
{
New -ItemProperty -Path HKLM : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -Name EnableLinkedConnections -PropertyType DWord -Value 0 -Forc e
Remove -ItemProperty -Path HKLM : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Policies \ System -Name EnableLinkedConnections -Force -ErrorAction Ignor e
}
}
}
@ -4820,6 +4855,7 @@ function WindowsFeatures
}
}
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
# Getting list of all optional features according to the conditions
@ -4831,10 +4867,13 @@ function WindowsFeatures
if ( -not ( $Features ) )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . NoData -Verbose
return
}
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . DialogBoxOpening -Verbose
#region Sendkey function
@ -4844,9 +4883,9 @@ function WindowsFeatures
Add-Type -AssemblyName System . Windows . Forms
$SetForegroundWindow = @ {
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " user32.dll " ) ]
public static extern bool ShowWindowAsync ( IntPtr hWnd , int nCmdShow ) ;
@ -5103,6 +5142,7 @@ function WindowsCapabilities
function UninstallButton
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
[void] $Window . Close ( )
@ -5112,12 +5152,14 @@ function WindowsCapabilities
if ( [string] $SelectedCapabilities . Name -match " Browser.InternetExplorer " )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . RestartWarning
}
}
function InstallButton
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
[void] $Window . Close ( )
@ -5127,6 +5169,7 @@ function WindowsCapabilities
if ( [string] $SelectedCapabilities . Name -match " Browser.InternetExplorer " )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . RestartWarning
}
}
@ -5204,6 +5247,7 @@ function WindowsCapabilities
}
}
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
# Getting list of all capabilities according to the conditions
@ -5215,10 +5259,13 @@ function WindowsCapabilities
if ( -not ( $Capabilities ) )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . NoData -Verbose
return
}
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . DialogBoxOpening -Verbose
#region Sendkey function
@ -5228,9 +5275,9 @@ function WindowsCapabilities
Add-Type -AssemblyName System . Windows . Forms
$SetForegroundWindow = @ {
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " user32.dll " ) ]
public static extern bool ShowWindowAsync ( IntPtr hWnd , int nCmdShow ) ;
@ -5741,18 +5788,18 @@ function SetUserShellFolderLocation
)
$KnownFolders = @ {
" Desktop " = @ ( " B4BFCC3A-DB2C-424C-B029-7FE99A87C641 " ) ;
" Documents " = @ ( " FDD39AD0-238F-46AF-ADB4-6C85480369C7 " , " f42ee2d3-909f-4907-8871-4c22fc0bf756 " ) ;
" Downloads " = @ ( " 374DE290-123F-4565-9164-39C4925E467B " , " 7d83ee9b-2244-4e70-b1f5-5393042af1e4 " ) ;
" Music " = @ ( " 4BD8D571-6D19-48D3-BE97-422220080E43 " , " a0c69a99-21c8-4671-8703-7934162fcf1d " ) ;
" Pictures " = @ ( " 33E28130-4E1E-4676-835A-98395C3BC3BB " , " 0ddd015d-b06c-45d5-8c4c-f59713854639 " ) ;
" Videos " = @ ( " 18989B1D-99B5-455B-841C-AB7C74E4DDFC " , " 35286a68-3c57-41a1-bbb1-0eae73d76c95 " ) ;
" Desktop " = @ ( " B4BFCC3A-DB2C-424C-B029-7FE99A87C641 " ) ;
" Documents " = @ ( " FDD39AD0-238F-46AF-ADB4-6C85480369C7 " , " f42ee2d3-909f-4907-8871-4c22fc0bf756 " ) ;
" Downloads " = @ ( " 374DE290-123F-4565-9164-39C4925E467B " , " 7d83ee9b-2244-4e70-b1f5-5393042af1e4 " ) ;
" Music " = @ ( " 4BD8D571-6D19-48D3-BE97-422220080E43 " , " a0c69a99-21c8-4671-8703-7934162fcf1d " ) ;
" Pictures " = @ ( " 33E28130-4E1E-4676-835A-98395C3BC3BB " , " 0ddd015d-b06c-45d5-8c4c-f59713854639 " ) ;
" Videos " = @ ( " 18989B1D-99B5-455B-841C-AB7C74E4DDFC " , " 35286a68-3c57-41a1-bbb1-0eae73d76c95 " ) ;
}
$Signature = @ {
Namespace = " WinAPI "
Name = " KnownFolders "
Language = " CSharp "
Namespace = " WinAPI "
Name = " KnownFolders "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " shell32.dll " ) ]
public extern static int SHSetKnownFolderPath ( ref Guid folderId , uint flags , IntPtr token , [ MarshalAs ( UnmanagedType . LPWStr ) ] string path ) ;
@ -5932,9 +5979,9 @@ public extern static int SHSetKnownFolderPath(ref Guid folderId, uint flags, Int
# Get the localized user folders names
$Signature = @ {
Namespace = " WinAPI "
Name = " GetStr "
Language = " CSharp "
Namespace = " WinAPI "
Name = " GetStr "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " kernel32.dll " , CharSet = CharSet . Auto ) ]
public static extern IntPtr GetModuleHandle ( string lpModuleName ) ;
@ -5968,6 +6015,7 @@ public static string GetString(uint strId)
{
" Root "
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . RetrievingDrivesList -Verbose
Write-Information -MessageData " " -InformationAction Continue
@ -5991,7 +6039,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DesktopLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6025,7 +6072,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DocumentsLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6059,7 +6105,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DownloadsLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6093,7 +6138,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $MusicLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6125,8 +6169,8 @@ public static string GetString(uint strId)
$CurrentUserFolderLocation = Get-ItemPropertyValue -Path " HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders " -Name " My Pictures "
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $PicturesLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6160,7 +6204,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $VideosLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6194,7 +6237,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DesktopLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6238,7 +6280,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DocumentsLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6282,7 +6323,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DownloadsLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6326,7 +6366,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $MusicLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6370,7 +6409,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $PicturesLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6414,7 +6452,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $VideosLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6460,7 +6497,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DesktopLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6491,7 +6527,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DocumentsLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6522,7 +6557,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $DownloadsLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6553,7 +6587,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $MusicLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6584,7 +6617,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $PicturesLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6615,7 +6647,6 @@ public static string GetString(uint strId)
Write-Verbose -Message ( $Localization . CurrentUserFolderLocation -f $VideosLocalizedString , $CurrentUserFolderLocation ) -Verbose
Write-Information -MessageData " " -InformationAction Continue
Write-Warning -Message $Localization . FilesWontBeMoved
Write-Information -MessageData " " -InformationAction Continue
@ -6718,14 +6749,14 @@ function WinPrtScrFolder
. SYNOPSIS
Recommended troubleshooter preferences
. PARAMETER Automatic
. PARAMETER Automatically
Run troubleshooter automatically , then notify me
. PARAMETER Default
Ask me before running troubleshooter
. EXAMPLE
RecommendedTroubleshooting -Automatic
RecommendedTroubleshooting -Automatically
. EXAMPLE
RecommendedTroubleshooting -Default
@ -6742,10 +6773,10 @@ function RecommendedTroubleshooting
(
[ Parameter (
Mandatory = $true ,
ParameterSetName = " Automatic "
ParameterSetName = " Automatically "
) ]
[switch]
$Automatic ,
$Automatically ,
[ Parameter (
Mandatory = $true ,
@ -6757,7 +6788,7 @@ function RecommendedTroubleshooting
switch ( $PSCmdlet . ParameterSetName )
{
" Automatic "
" Automatically "
{
if ( -not ( Test-Path -Path HKLM : \ SOFTWARE \ Microsoft \ WindowsMitigation ) )
{
@ -6948,7 +6979,7 @@ function F1HelpPage
}
" Enable "
{
Remove-Item -Path " HKCU:\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee} " -Recurse -Force -ErrorAction SilentlyContinu e
Remove-Item -Path " HKCU:\SOFTWARE\Classes\Typelib\{8cec5860-07a1-11d9-b15e-000d56bfe6ee} " -Recurse -Force -ErrorAction Ignor e
}
}
}
@ -7050,7 +7081,7 @@ function CapsLock
}
" Enable "
{
Remove-ItemProperty -Path " HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard Layout " -Name " Scancode Map " -Force
Remove-ItemProperty -Path " HKLM:\SYSTEM\CurrentControlSet\Control\Keyboard Layout " -Name " Scancode Map " -Force -ErrorAction Ignore
}
}
}
@ -8048,6 +8079,7 @@ namespace FileAssoc
Set-Icon -ProgId $ProgId -Icon $Icon
}
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
# Setting additional parameters to comply with the requirements before configuring the extension
@ -8058,9 +8090,9 @@ namespace FileAssoc
# Refresh the desktop icons
$UpdateExplorer = @ {
Namespace = " WinAPI "
Name = " UpdateExplorer "
Language = " CSharp "
Namespace = " WinAPI "
Name = " UpdateExplorer "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " shell32.dll " , CharSet = CharSet . Auto , SetLastError = false ) ]
private static extern int SHChangeNotify ( int eventId , int flags , IntPtr item1 , IntPtr item2 ) ;
@ -8226,9 +8258,9 @@ function WSL
Add-Type -AssemblyName System . Windows . Forms
$SetForegroundWindow = @ {
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " user32.dll " ) ]
public static extern bool ShowWindowAsync ( IntPtr hWnd , int nCmdShow ) ;
@ -8512,9 +8544,9 @@ function PinToStart
# Extract strings from shell32.dll using its' number
# https://github.com/Disassembler0/Win10-Initial-Setup-Script/issues/8#issue-227159084
$Signature = @ {
Namespace = " WinAPI "
Name = " GetStr "
Language = " CSharp "
Namespace = " WinAPI "
Name = " GetStr "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " kernel32.dll " , CharSet = CharSet . Auto ) ]
public static extern IntPtr GetModuleHandle ( string lpModuleName ) ;
@ -8941,6 +8973,7 @@ function UninstallUWPApps
$AllUsers
)
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
$AppxPackages = Get-AppxPackage -PackageTypeFilter Bundle -AllUsers : $AllUsers | Where-Object -FilterScript { $_ . Name -notin $ExcludedAppxPackages }
@ -9028,6 +9061,7 @@ function UninstallUWPApps
function ButtonUninstallClick
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
$Window . Close ( ) | Out-Null
@ -9115,10 +9149,12 @@ function UninstallUWPApps
if ( $AppxPackages . Count -eq 0 )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . NoData -Verbose
}
else
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . DialogBoxOpening -Verbose
#region Sendkey function
@ -9128,9 +9164,9 @@ function UninstallUWPApps
Add-Type -AssemblyName System . Windows . Forms
$SetForegroundWindow = @ {
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " user32.dll " ) ]
public static extern bool ShowWindowAsync ( IntPtr hWnd , int nCmdShow ) ;
@ -9209,7 +9245,7 @@ function RestoreUWPApps
xmlns : x = " http://schemas.microsoft.com/winfx/2006/xaml "
Name = " Window "
MinHeight = " 400 " MinWidth = " 410 "
SizeToContent = " WidthAndHeight " WindowStartupLocation = " CenterScreen "
SizeToContent = " Width " WindowStartupLocation = " CenterScreen "
TextOptions . TextFormattingMode = " Display " SnapsToDevicePixels = " True "
FontFamily = " Candara " FontSize = " 16 " ShowInTaskbar = " True "
Background = " #F1F1F1 " Foreground = " #262626 " >
@ -9286,6 +9322,7 @@ function RestoreUWPApps
#region Functions
function Get-AppxManifest
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
# You cannot retrieve packages using -PackageTypeFilter Bundle, otherwise you won't get the InstallLocation attribute. It can be retrieved only by comparing with $Bundles
@ -9359,6 +9396,7 @@ function RestoreUWPApps
function ButtonRestoreClick
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Patient -Verbose
$Window . Close ( ) | Out-Null
@ -9367,8 +9405,8 @@ function RestoreUWPApps
Register = $true
ForceApplicationShutdown = $true
ForceUpdateFromAnyVersion = $true
DisableDevelopmentMod = $true
Verbose = [switch] :: Present
DisableDevelopmentMode = $true
Verbose = $true
}
$PackagesToRestore | Add-AppxPackage @Parameters
}
@ -9441,10 +9479,12 @@ function RestoreUWPApps
if ( $AppxPackages . Count -eq 0 )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . NoData -Verbose
}
else
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . DialogBoxOpening -Verbose
#region Sendkey function
@ -9454,9 +9494,9 @@ function RestoreUWPApps
Add-Type -AssemblyName System . Windows . Forms
$SetForegroundWindow = @ {
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
Namespace = " WinAPI "
Name = " ForegroundWindow "
Language = " CSharp "
MemberDefinition = @ "
[ DllImport ( " user32.dll " ) ]
public static extern bool ShowWindowAsync ( IntPtr hWnd , int nCmdShow ) ;
@ -9551,7 +9591,7 @@ function HEIF
" Install "
{
# Check whether the extension is already installed
if ( -not ( Get-AppxPackage -Name Microsoft . HEVCVideoExtension ) -and ( Get-AppxPackage -Name Microsoft . Windows . Photos ) )
if ( ( -not ( Get-AppxPackage -Name Microsoft . HEVCVideoExtension ) ) -and ( Get-AppxPackage -Name Microsoft . Windows . Photos ) )
{
try
{
@ -9582,14 +9622,15 @@ function HEIF
if ( $Package -like " Microsoft.HEVCVideoExtension_*_x64__8wekyb3d8bbwe.appx " )
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . HEVCDownloading -Verbose
$DownloadsFolder = Get-ItemPropertyValue -Path " HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders " -Name " {374DE290-123F-4565-9164-39C4925E467B} "
$Parameters = @ {
Uri = $TempURL
OutFile = " $ DownloadsFolder\ $ Package "
Uri = $TempURL
OutFile = " $ DownloadsFolder\ $ Package "
SslProtocol = " Tls12 "
Verbose = [switch] :: Present
Verbose = $true
}
Invoke-WebRequest @Parameters
@ -9752,43 +9793,28 @@ function BackgroundUWPApps
{
" Disable "
{
# Remove all excluded apps running in the background
Get-ChildItem -Path HKCU : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ BackgroundAccessApplications | ForEach-Object -Process {
Remove-ItemProperty -Path $_ . PsPath -Name * -Force
}
$ExcludedBackgroundApps = @ (
# Lock screen app
" Microsoft.LockApp " ,
# Content Delivery Manager (delivers Windows Spotlight wallpapers to the lock screen)
" Microsoft.Windows.ContentDeliveryManager " ,
# Cortana
" Microsoft.Windows.Cortana " ,
# Windows Search
" Microsoft.Windows.Search " ,
# Windows Security
" Microsoft.Windows.SecHealthUI " ,
# Windows Shell Experience (Action center, snipping support, toast notification, touch screen keyboard)
" Microsoft.Windows.ShellExperienceHost " ,
# The Start menu
" Microsoft.Windows.StartMenuExperienceHost " ,
# Exclude apps from the Bundle only
$BackgroundAccessApplications = @ ( ( Get-ChildItem -Path HKCU : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ BackgroundAccessApplications ) . PSChildName )
$ExcludedBackgroundAccessApplications = @ ( )
foreach ( $BackgroundAccessApplication in $BackgroundAccessApplications )
{
if ( Get-AppxPackage -PackageTypeFilter Bundle -AllUsers | Where-Object -FilterScript { $_ . PackageFamilyName -eq $BackgroundAccessApplication } )
{
$ExcludedBackgroundAccessApplications + = $BackgroundAccessApplication
}
}
# Microsoft Store
" Microsoft.WindowsStore "
)
$OFS = " | "
Get-ChildItem -Path HKCU : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ BackgroundAccessApplications | Where-Object -FilterScript { $_ . PSChildName -notmatch " ^ $( $ExcludedBackgroundApps . ForEach ( { [regex] :: Escape ( $_ ) } ) ) " } | ForEach-Object -Process {
Get-ChildItem -Path HKCU : \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ BackgroundAccessApplications | Where-Object -FilterScript { $_ . PSChildName -in $ExcludedBackgroundAccessApplications } | ForEach-Object -Process {
New-ItemProperty -Path $_ . PsPath -Name Disabled -PropertyType DWord -Value 1 -Force
New-ItemProperty -Path $_ . PsPath -Name DisabledByUser -PropertyType DWord -Value 1 -Force
}
$OFS = " "
# Open "Background apps" page
# Open the "Background apps" page
Start-Process -FilePath ms-settings : privacy-backgroundapps
}
" Enable "
@ -9979,6 +10005,7 @@ function SetAppGraphicsPerformance
}
" 1 "
{
Write-Information -MessageData " " -InformationAction Continue
Write-Verbose -Message $Localization . Skipped -Verbose
}
}
@ -10210,9 +10237,9 @@ while (`$true)
" @
# Create the "Windows Cleanup" task
$Action = New-ScheduledTaskAction -Execute powershell . exe -Argument " -WindowStyle Hidden -Command $ CleanupTask "
$Settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
$Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
$Action = New-ScheduledTaskAction -Execute powershell . exe -Argument " -WindowStyle Hidden -Command $ CleanupTask "
$Settings = New-ScheduledTaskSettingsSet -Compatibility Win8 -StartWhenAvailable
$Principal = New-ScheduledTaskPrincipal -UserId $env:USERNAME -RunLevel Highest
$Parameters = @ {
TaskName = " Windows Cleanup "
TaskPath = " Sophia Script "
@ -10894,7 +10921,7 @@ function EventViewerCustomView
}
" Disable "
{
Remove-Item -Path " $ env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml " -Force -ErrorAction SilentlyContinu e
Remove-Item -Path " $ env:ProgramData\Microsoft\Event Viewer\Views\ProcessCreation.xml " -Force -ErrorAction Ignor e
}
}
}
@ -11318,16 +11345,15 @@ function MSIExtractContext
{
New-Item -Path Registry :: HKEY_CLASSES_ROOT \ Msi . Package \ shell \ Extract \ Command -Force
}
$Value = " {0} " -f 'msiexec.exe /a "%1" /qb TARGETDIR="%1 extracted"'
$Value = " {0} " -f " msiexec.exe /a `" %1 `" /qb TARGETDIR= `" %1 extracted `" "
New-ItemProperty -Path Registry :: HKEY_CLASSES_ROOT \ Msi . Package \ shell \ Extract \ Command -Name " (default) " -PropertyType String -Value $Value -Force
New-ItemProperty -Path Registry :: HKEY_CLASSES_ROOT \ Msi . Package \ shell \ Extract -Name MUIVerb -PropertyType String -Value " @shell32.dll,-37514 " -Force
New-ItemProperty -Path Registry :: HKEY_CLASSES_ROOT \ Msi . Package \ shell \ Extract -Name Icon -PropertyType String -Value " shell32.dll,-16817 " -Force
}
" Hide "
{
Remove-Item -Path Registry :: HKEY_CLASSES_ROOT \ Msi . Package \ shell \ Extract -Recurse -Force -ErrorAction SilentlyContinu e
Remove-Item -Path Registry :: HKEY_CLASSES_ROOT \ Msi . Package \ shell \ Extract -Recurse -Force -ErrorAction Ignor e
}
}
}
@ -11384,9 +11410,8 @@ function CABInstallContext
}
" Hide "
{
Remove-Item -Path Registry :: HKEY_CLASSES_ROOT \ CABFolder \ Shell \ RunAs -Recurse -Force -ErrorAction SilentlyContinu e
Remove-Item -Path Registry :: HKEY_CLASSES_ROOT \ CABFolder \ Shell \ RunAs -Recurse -Force -ErrorAction Ignor e
}
}
}
@ -11609,7 +11634,7 @@ function EditWithPaint3DContext
$Extensions = @ ( " .bmp " , " .gif " , " .jpe " , " .jpeg " , " .jpg " , " .png " , " .tif " , " .tiff " )
foreach ( $Extension in $Extensions )
{
Remove-ItemProperty -Path " Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\ $ Extension\Shell\3D Edit " -Name ProgrammaticAccessOnly -Force -ErrorAction SilentlyContinu e
Remove-ItemProperty -Path " Registry::HKEY_CLASSES_ROOT\SystemFileAssociations\ $ Extension\Shell\3D Edit " -Name ProgrammaticAccessOnly -Force -ErrorAction Ignor e
}
}
}
@ -12046,7 +12071,7 @@ function BitmapImageNewContext
{
if ( ( Get-WindowsCapability -Online -Name " Microsoft.Windows.MSPaint* " ) . State -eq " Installed " )
{
Remove-Item -Path Registry :: HKEY_CLASSES_ROOT \ . bmp \ ShellNew -Force -ErrorAction SilentlyContinu e
Remove-Item -Path Registry :: HKEY_CLASSES_ROOT \ . bmp \ ShellNew -Force -ErrorAction Ignor e
}
}
" Show "
@ -12331,9 +12356,9 @@ function UseStoreOpenWith
function RefreshEnvironment
{
$UpdateEnvironment = @ {
Namespace = " WinAPI "
Name = " UpdateEnvironment "
Language = " CSharp "
Namespace = " WinAPI "
Name = " UpdateEnvironment "
Language = " CSharp "
MemberDefinition = @ "
private static readonly IntPtr HWND_BROADCAST = new IntPtr ( 0xffff ) ;
private const int WM_SETTINGCHANGE = 0x1a ;