From 2a96da4ce702a752022faf5b36be5e36117fbcb7 Mon Sep 17 00:00:00 2001 From: Dmitry Nefedov Date: Sat, 29 Jun 2024 22:33:18 +0300 Subject: [PATCH] WindowsScriptHost improved --- .../Module/Sophia.psm1 | 29 +++++++++++++--- .../Module/Sophia.psm1 | 31 ++++++++++++++--- .../Module/Sophia.psm1 | 31 ++++++++++++++--- .../Module/Sophia.psm1 | 33 +++++++++++++++---- .../Module/Sophia.psm1 | 29 ++++++++++++---- .../Module/Sophia.psm1 | 33 +++++++++++++++---- 6 files changed, 151 insertions(+), 35 deletions(-) diff --git a/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 index 5ab2d08a..a51f8e18 100644 --- a/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_10/Module/Sophia.psm1 @@ -148,7 +148,9 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Detect Windows bitness if (-not [System.Environment]::Is64BitOperatingSystem) { + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message $Localization.UnsupportedOSBitness + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -871,7 +873,12 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); Get-ChildItem -Path "$env:TEMP\Computer.txt", "$env:TEMP\User.txt" -Force -ErrorAction Ignore | Remove-Item -Recurse -Force -ErrorAction Ignore # Save all opened folders in order to restore them after File Explorer restart - $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + try + { + $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + } + catch [System.Management.Automation.PropertyNotFoundException] + {} <# .SYNOPSIS @@ -997,7 +1004,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Get the name of a preset (e.g Sophia.ps1) regardless it was named # $_.File has no EndsWith() method Write-Information -MessageData "" -InformationAction Continue - $PresetName = Split-Path -Path (((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")}) -Leaf + [string]$PresetName = ((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")} Write-Verbose -Message ($Localization.CustomizationWarning -f $PresetName) -Verbose do @@ -12577,6 +12584,7 @@ function SoftwareDistributionTask # Get user's SID the task was created as $Script:SID = ([xml]$_.xml).Task.Principals.Principal.UserID } + # Convert SID to username $TaskUserAccount = (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value -split "\\" | Select-Object -Last 1 @@ -13686,6 +13694,14 @@ function WindowsScriptHost { "Disable" { + # Check if any scheduled tasks were created before, because they rely on Windows Host running vbs files + Get-ScheduledTask -TaskName SoftwareDistribution, Temp, "Windows Cleanup", "Windows Cleanup Notification" | ForEach-Object -Process { + if ($_.State -eq "Ready") + { + continue + } + } + if (-not (Test-Path -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings")) { New-Item -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings" -Force @@ -14862,11 +14878,14 @@ public static void PostMessage() Start-Sleep -Seconds 3 # Restoring closed folders - foreach ($Script:OpenedFolder in $Script:OpenedFolders) + if (Get-Variable -Name OpenedFolder -ErrorAction Ignore) { - if (Test-Path -Path $Script:OpenedFolder) + foreach ($Script:OpenedFolder in $Script:OpenedFolders) { - Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + if (Test-Path -Path $Script:OpenedFolder) + { + Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + } } } 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 9646e938..e3cd5296 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 @@ -148,7 +148,9 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Detect Windows bitness if (-not [System.Environment]::Is64BitOperatingSystem) { + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message $Localization.UnsupportedOSBitness + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -584,7 +586,9 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Detect Windows build version if ((Get-WindowsEdition -Online).Edition -notmatch "EnterpriseS") { + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message $Localization.UnsupportedOSBuild + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -839,7 +843,12 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); Get-ChildItem -Path "$env:TEMP\Computer.txt", "$env:TEMP\User.txt" -Force -ErrorAction Ignore | Remove-Item -Recurse -Force -ErrorAction Ignore # Save all opened folders in order to restore them after File Explorer restart - $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + try + { + $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + } + catch [System.Management.Automation.PropertyNotFoundException] + {} <# .SYNOPSIS @@ -965,7 +974,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Get the name of a preset (e.g Sophia.ps1) regardless it was named # $_.File has no EndsWith() method Write-Information -MessageData "" -InformationAction Continue - $PresetName = Split-Path -Path (((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")}) -Leaf + [string]$PresetName = ((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")} Write-Verbose -Message ($Localization.CustomizationWarning -f $PresetName) -Verbose do @@ -9429,6 +9438,7 @@ function SoftwareDistributionTask # Get user's SID the task was created as $Script:SID = ([xml]$_.xml).Task.Principals.Principal.UserID } + # Convert SID to username $TaskUserAccount = (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value -split "\\" | Select-Object -Last 1 @@ -10538,6 +10548,14 @@ function WindowsScriptHost { "Disable" { + # Check if any scheduled tasks were created before, because they rely on Windows Host running vbs files + Get-ScheduledTask -TaskName SoftwareDistribution, Temp, "Windows Cleanup", "Windows Cleanup Notification" | ForEach-Object -Process { + if ($_.State -eq "Ready") + { + continue + } + } + if (-not (Test-Path -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings")) { New-Item -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings" -Force @@ -11637,11 +11655,14 @@ public static void PostMessage() Start-Sleep -Seconds 3 # Restoring closed folders - foreach ($Script:OpenedFolder in $Script:OpenedFolders) + if (Get-Variable -Name OpenedFolder -ErrorAction Ignore) { - if (Test-Path -Path $Script:OpenedFolder) + foreach ($Script:OpenedFolder in $Script:OpenedFolders) { - Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + if (Test-Path -Path $Script:OpenedFolder) + { + Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + } } } 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 9e02bdf9..b702b2e1 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 @@ -148,7 +148,9 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Detect Windows bitness if (-not [System.Environment]::Is64BitOperatingSystem) { + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message $Localization.UnsupportedOSBitness + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -584,7 +586,9 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Detect Windows build version if ((Get-WindowsEdition -Online).Edition -notmatch "EnterpriseS") { + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message $Localization.UnsupportedOSBuild + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -839,7 +843,12 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); Get-ChildItem -Path "$env:TEMP\Computer.txt", "$env:TEMP\User.txt" -Force -ErrorAction Ignore | Remove-Item -Recurse -Force -ErrorAction Ignore # Save all opened folders in order to restore them after File Explorer restart - $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + try + { + $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + } + catch [System.Management.Automation.PropertyNotFoundException] + {} <# .SYNOPSIS @@ -965,7 +974,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Get the name of a preset (e.g Sophia.ps1) regardless it was named # $_.File has no EndsWith() method Write-Information -MessageData "" -InformationAction Continue - $PresetName = Split-Path -Path (((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")}) -Leaf + [string]$PresetName = ((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")} Write-Verbose -Message ($Localization.CustomizationWarning -f $PresetName) -Verbose do @@ -10563,6 +10572,7 @@ function SoftwareDistributionTask # Get user's SID the task was created as $Script:SID = ([xml]$_.xml).Task.Principals.Principal.UserID } + # Convert SID to username $TaskUserAccount = (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value -split "\\" | Select-Object -Last 1 @@ -11672,6 +11682,14 @@ function WindowsScriptHost { "Disable" { + # Check if any scheduled tasks were created before, because they rely on Windows Host running vbs files + Get-ScheduledTask -TaskName SoftwareDistribution, Temp, "Windows Cleanup", "Windows Cleanup Notification" | ForEach-Object -Process { + if ($_.State -eq "Ready") + { + continue + } + } + if (-not (Test-Path -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings")) { New-Item -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings" -Force @@ -12831,11 +12849,14 @@ public static void PostMessage() Start-Sleep -Seconds 3 # Restoring closed folders - foreach ($Script:OpenedFolder in $Script:OpenedFolders) + if (Get-Variable -Name OpenedFolder -ErrorAction Ignore) { - if (Test-Path -Path $Script:OpenedFolder) + foreach ($Script:OpenedFolder in $Script:OpenedFolders) { - Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + if (Test-Path -Path $Script:OpenedFolder) + { + Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + } } } 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 4cde4e24..d4de75a3 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 @@ -147,7 +147,9 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Detect Windows bitness if (-not [System.Environment]::Is64BitOperatingSystem) { + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message $Localization.UnsupportedOSBitness + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -875,7 +877,12 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); Get-ChildItem -Path "$env:TEMP\Computer.txt", "$env:TEMP\User.txt" -Force -ErrorAction Ignore | Remove-Item -Recurse -Force -ErrorAction Ignore # Save all opened folders in order to restore them after File Explorer restart - $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + try + { + $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + } + catch [System.Management.Automation.PropertyNotFoundException] + {} <# .SYNOPSIS @@ -1001,7 +1008,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Get the name of a preset (e.g Sophia.ps1) regardless it was named # $_.File has no EndsWith() method Write-Information -MessageData "" -InformationAction Continue - $PresetName = Split-Path -Path (((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")}) -Leaf + [string]$PresetName = ((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")} Write-Verbose -Message ($Localization.CustomizationWarning -f $PresetName) -Verbose do @@ -4950,8 +4957,8 @@ function Cursors Namespace = "WinAPI" Name = "Cursor" Language = "CSharp" - CompilerOptions = $CompilerOptions - MemberDefinition = @" + CompilerOptions = $CompilerOptions + MemberDefinition = @" [DllImport("user32.dll", EntryPoint = "SystemParametersInfo")] public static extern bool SystemParametersInfo(uint uiAction, uint uiParam, uint pvParam, uint fWinIni); "@ @@ -12593,6 +12600,7 @@ function SoftwareDistributionTask # Get user's SID the task was created as $Script:SID = ([xml]$_.xml).Task.Principals.Principal.UserID } + # Convert SID to username $TaskUserAccount = (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value -split "\\" | Select-Object -Last 1 @@ -13702,6 +13710,14 @@ function WindowsScriptHost { "Disable" { + # Check if any scheduled tasks were created before, because they rely on Windows Host running vbs files + Get-ScheduledTask -TaskName SoftwareDistribution, Temp, "Windows Cleanup", "Windows Cleanup Notification" | ForEach-Object -Process { + if ($_.State -eq "Ready") + { + continue + } + } + if (-not (Test-Path -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings")) { New-Item -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings" -Force @@ -14878,11 +14894,14 @@ public static void PostMessage() Start-Sleep -Seconds 3 # Restoring closed folders - foreach ($Script:OpenedFolder in $Script:OpenedFolders) + if (Get-Variable -Name OpenedFolder -ErrorAction Ignore) { - if (Test-Path -Path $Script:OpenedFolder) + foreach ($Script:OpenedFolder in $Script:OpenedFolders) { - Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + if (Test-Path -Path $Script:OpenedFolder) + { + Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + } } } diff --git a/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 b/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 index ed7e9936..26850971 100644 --- a/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 +++ b/src/Sophia_Script_for_Windows_11/Module/Sophia.psm1 @@ -861,7 +861,12 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); Get-ChildItem -Path "$env:TEMP\Computer.txt", "$env:TEMP\User.txt" -Force -ErrorAction Ignore | Remove-Item -Recurse -Force -ErrorAction Ignore # Save all opened folders in order to restore them after File Explorer restart - $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + try + { + $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + } + catch [System.Management.Automation.PropertyNotFoundException] + {} <# .SYNOPSIS @@ -987,7 +992,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); # Get the name of a preset (e.g Sophia.ps1) regardless it was named # $_.File has no EndsWith() method Write-Information -MessageData "" -InformationAction Continue - $PresetName = Split-Path -Path (((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")}) -Leaf + [string]$PresetName = ((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")} Write-Verbose -Message ($Localization.CustomizationWarning -f $PresetName) -Verbose do @@ -11752,6 +11757,7 @@ function SoftwareDistributionTask # Get user's SID the task was created as $Script:SID = ([xml]$_.xml).Task.Principals.Principal.UserID } + # Convert SID to username $TaskUserAccount = (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value -split "\\" | Select-Object -Last 1 @@ -12836,7 +12842,7 @@ function SaveZoneInformation .NOTES Current user #> -function WindowsScriptHost ### +function WindowsScriptHost { param ( @@ -12859,6 +12865,14 @@ function WindowsScriptHost ### { "Disable" { + # Check if any scheduled tasks were created before, because they rely on Windows Host running vbs files + Get-ScheduledTask -TaskName SoftwareDistribution, Temp, "Windows Cleanup", "Windows Cleanup Notification" | ForEach-Object -Process { + if ($_.State -eq "Ready") + { + continue + } + } + if (-not (Test-Path -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings")) { New-Item -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings" -Force @@ -14038,11 +14052,14 @@ public static void PostMessage() Start-Sleep -Seconds 3 # Restoring closed folders - foreach ($Script:OpenedFolder in $Script:OpenedFolders) + if (Get-Variable -Name OpenedFolder -ErrorAction Ignore) { - if (Test-Path -Path $Script:OpenedFolder) + foreach ($Script:OpenedFolder in $Script:OpenedFolders) { - Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + if (Test-Path -Path $Script:OpenedFolder) + { + Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + } } } 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 1683c409..93d8aeec 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 @@ -306,7 +306,7 @@ public static extern bool SetForegroundWindow(IntPtr hWnd); exit } -pause + # Check whether Windows Feature Experience Pack was removed by harmful tweakers if (-not (Get-AppxPackage -Name MicrosoftWindows.Client.CBS)) { @@ -598,10 +598,12 @@ pause exit } - if ((Get-WindowsEdition -Online).Edition -notmatch "EnterpriseS") + if ((Get-WindowsEdition -Online).Edition -match "EnterpriseS") { # Will be removed when Windows 11 Enterprise LTSC will be released officially this Autumn along side with 24H2 + Write-Information -MessageData "" -InformationAction Continue Write-Warning -Message "You're using a leaked Windows 11 Enterprise LTSC image. The official release set to November." + Write-Information -MessageData "" -InformationAction Continue Write-Verbose -Message "https://t.me/sophia_chat" -Verbose Write-Verbose -Message "https://discord.gg/sSryhaEv79" -Verbose @@ -863,7 +865,12 @@ pause Get-ChildItem -Path "$env:TEMP\Computer.txt", "$env:TEMP\User.txt" -Force -ErrorAction Ignore | Remove-Item -Recurse -Force -ErrorAction Ignore # Save all opened folders in order to restore them after File Explorer restart - $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + try + { + $Script:OpenedFolders = {(New-Object -ComObject Shell.Application).Windows() | ForEach-Object -Process {$_.Document.Folder.Self.Path}}.Invoke() + } + catch [System.Management.Automation.PropertyNotFoundException] + {} <# .SYNOPSIS @@ -989,7 +996,7 @@ pause # Get the name of a preset (e.g Sophia.ps1) regardless it was named # $_.File has no EndsWith() method Write-Information -MessageData "" -InformationAction Continue - $PresetName = Split-Path -Path (((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")}) -Leaf + [string]$PresetName = ((Get-PSCallStack).Position | Where-Object -FilterScript {$_.File}).File | Where-Object -FilterScript {$_.EndsWith(".ps1")} Write-Verbose -Message ($Localization.CustomizationWarning -f $PresetName) -Verbose do @@ -11766,6 +11773,7 @@ function SoftwareDistributionTask # Get user's SID the task was created as $Script:SID = ([xml]$_.xml).Task.Principals.Principal.UserID } + # Convert SID to username $TaskUserAccount = (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value -split "\\" | Select-Object -Last 1 @@ -12873,6 +12881,14 @@ function WindowsScriptHost { "Disable" { + # Check if any scheduled tasks were created before, because they rely on Windows Host running vbs files + Get-ScheduledTask -TaskName SoftwareDistribution, Temp, "Windows Cleanup", "Windows Cleanup Notification" | ForEach-Object -Process { + if ($_.State -eq "Ready") + { + continue + } + } + if (-not (Test-Path -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings")) { New-Item -Path "HKCU:\Software\Microsoft\Windows Script Host\Settings" -Force @@ -14052,11 +14068,14 @@ public static void PostMessage() Start-Sleep -Seconds 3 # Restoring closed folders - foreach ($Script:OpenedFolder in $Script:OpenedFolders) + if (Get-Variable -Name OpenedFolder -ErrorAction Ignore) { - if (Test-Path -Path $Script:OpenedFolder) + foreach ($Script:OpenedFolder in $Script:OpenedFolders) { - Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + if (Test-Path -Path $Script:OpenedFolder) + { + Start-Process -FilePath explorer -ArgumentList $Script:OpenedFolder + } } }