|
|
@ -1,19 +1,20 @@
|
|
|
|
function Test-CompatibleImage() {
|
|
|
|
function Test-CompatibleImage() {
|
|
|
|
<#
|
|
|
|
<#
|
|
|
|
|
|
|
|
|
|
|
|
.SYNOPSIS
|
|
|
|
.SYNOPSIS
|
|
|
|
Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version
|
|
|
|
Checks the version of a Windows image and determines whether or not it is compatible with a specific feature depending on a desired version
|
|
|
|
|
|
|
|
|
|
|
|
.PARAMETER Name
|
|
|
|
.PARAMETER Name
|
|
|
|
imgVersion - The version of the Windows image
|
|
|
|
imgVersion - The version of the Windows image
|
|
|
|
desiredVersion - The version to compare the image version with
|
|
|
|
desiredVersion - The version to compare the image version with
|
|
|
|
|
|
|
|
#>
|
|
|
|
#>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
param
|
|
|
|
param
|
|
|
|
(
|
|
|
|
(
|
|
|
|
[Parameter(Mandatory = $true, Position=0)] [string] $imgVersion,
|
|
|
|
[Parameter(Mandatory, position=0)]
|
|
|
|
[Parameter(Mandatory = $true, Position=1)] [Version] $desiredVersion
|
|
|
|
[string]$imgVersion,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[Parameter(Mandatory, position=1)]
|
|
|
|
|
|
|
|
[Version]$desiredVersion
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
@ -25,8 +26,7 @@ function Test-CompatibleImage() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender = $false) {
|
|
|
|
function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender = $false) {
|
|
|
|
<#
|
|
|
|
<#
|
|
|
|
|
|
|
|
|
|
|
|
.SYNOPSIS
|
|
|
|
.SYNOPSIS
|
|
|
|
Removes certain features from ISO image
|
|
|
|
Removes certain features from ISO image
|
|
|
|
|
|
|
|
|
|
|
@ -36,13 +36,10 @@ function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender
|
|
|
|
|
|
|
|
|
|
|
|
.EXAMPLE
|
|
|
|
.EXAMPLE
|
|
|
|
Remove-Features -keepDefender:$false
|
|
|
|
Remove-Features -keepDefender:$false
|
|
|
|
|
|
|
|
#>
|
|
|
|
#>
|
|
|
|
try {
|
|
|
|
try
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
|
|
|
|
$featlist = (Get-WindowsOptionalFeature -Path $scratchDir).FeatureName
|
|
|
|
if ($dumpFeatures)
|
|
|
|
if ($dumpFeatures) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$featlist > allfeaturesdump.txt
|
|
|
|
$featlist > allfeaturesdump.txt
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -57,8 +54,7 @@ function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender
|
|
|
|
|
|
|
|
|
|
|
|
if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
|
|
|
|
if ($keepDefender) { $featlist = $featlist | Where-Object { $_ -NotLike "*Defender*" }}
|
|
|
|
|
|
|
|
|
|
|
|
foreach($feature in $featlist)
|
|
|
|
foreach($feature in $featlist) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$status = "Removing feature $feature"
|
|
|
|
$status = "Removing feature $feature"
|
|
|
|
Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
|
|
|
|
Write-Progress -Activity "Removing features" -Status $status -PercentComplete ($counter++/$featlist.Count*100)
|
|
|
|
Write-Debug "Removing feature $feature"
|
|
|
|
Write-Debug "Removing feature $feature"
|
|
|
@ -67,16 +63,13 @@ function Remove-Features([switch] $dumpFeatures = $false, [switch] $keepDefender
|
|
|
|
Write-Progress -Activity "Removing features" -Status "Ready" -Completed
|
|
|
|
Write-Progress -Activity "Removing features" -Status "Ready" -Completed
|
|
|
|
Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in <installation media>\Sources."
|
|
|
|
Write-Host "You can re-enable the disabled features at any time, using either Windows Update or the SxS folder in <installation media>\Sources."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
catch {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed"
|
|
|
|
Write-Host "Unable to get information about the features. MicroWin processing will continue, but features will not be processed"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function Remove-Packages
|
|
|
|
function Remove-Packages {
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
try
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
$pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
|
|
|
|
$pkglist = (Get-WindowsPackage -Path "$scratchDir").PackageName
|
|
|
|
|
|
|
|
|
|
|
|
$pkglist = $pkglist | Where-Object {
|
|
|
|
$pkglist = $pkglist | Where-Object {
|
|
|
@ -117,8 +110,7 @@ function Remove-Packages
|
|
|
|
$_ -NotLike "*UI.XaML*"
|
|
|
|
$_ -NotLike "*UI.XaML*"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($pkg in $pkglist)
|
|
|
|
foreach ($pkg in $pkglist) {
|
|
|
|
{
|
|
|
|
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
$status = "Removing $pkg"
|
|
|
|
$status = "Removing $pkg"
|
|
|
|
Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
|
|
|
|
Write-Progress -Activity "Removing Apps" -Status $status -PercentComplete ($counter++/$pkglist.Count*100)
|
|
|
@ -132,16 +124,13 @@ function Remove-Packages
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
|
|
|
|
Write-Progress -Activity "Removing Apps" -Status "Ready" -Completed
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch
|
|
|
|
catch {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed"
|
|
|
|
Write-Host "Unable to get information about the packages. MicroWin processing will continue, but packages will not be processed"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
|
|
|
|
function Remove-ProvisionedPackages([switch] $keepSecurity = $false) {
|
|
|
|
{
|
|
|
|
<#
|
|
|
|
<#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.SYNOPSIS
|
|
|
|
.SYNOPSIS
|
|
|
|
Removes AppX packages from a Windows image during MicroWin processing
|
|
|
|
Removes AppX packages from a Windows image during MicroWin processing
|
|
|
|
|
|
|
|
|
|
|
@ -150,8 +139,7 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
|
|
|
|
|
|
|
|
|
|
|
|
.EXAMPLE
|
|
|
|
.EXAMPLE
|
|
|
|
Remove-ProvisionedPackages -keepSecurity:$false
|
|
|
|
Remove-ProvisionedPackages -keepSecurity:$false
|
|
|
|
|
|
|
|
#>
|
|
|
|
#>
|
|
|
|
|
|
|
|
$appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
|
|
|
|
$appxProvisionedPackages = Get-AppxProvisionedPackage -Path "$($scratchDir)" | Where-Object {
|
|
|
|
$_.PackageName -NotLike "*AppInstaller*" -AND
|
|
|
|
$_.PackageName -NotLike "*AppInstaller*" -AND
|
|
|
|
$_.PackageName -NotLike "*Store*" -and
|
|
|
|
$_.PackageName -NotLike "*Store*" -and
|
|
|
@ -165,12 +153,10 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
|
|
|
|
$_.PackageName -NotLike "*Foundation*"
|
|
|
|
$_.PackageName -NotLike "*Foundation*"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ($?)
|
|
|
|
if ($?) {
|
|
|
|
{
|
|
|
|
|
|
|
|
if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }}
|
|
|
|
if ($keepSecurity) { $appxProvisionedPackages = $appxProvisionedPackages | Where-Object { $_.PackageName -NotLike "*SecHealthUI*" }}
|
|
|
|
$counter = 0
|
|
|
|
$counter = 0
|
|
|
|
foreach ($appx in $appxProvisionedPackages)
|
|
|
|
foreach ($appx in $appxProvisionedPackages) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$status = "Removing Provisioned $($appx.PackageName)"
|
|
|
|
$status = "Removing Provisioned $($appx.PackageName)"
|
|
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
|
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status $status -PercentComplete ($counter++/$appxProvisionedPackages.Count*100)
|
|
|
|
try {
|
|
|
|
try {
|
|
|
@ -183,14 +169,12 @@ function Remove-ProvisionedPackages([switch] $keepSecurity = $false)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
|
|
|
|
Write-Progress -Activity "Removing Provisioned Apps" -Status "Ready" -Completed
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Host "Could not get Provisioned App information. Skipping process..."
|
|
|
|
Write-Host "Could not get Provisioned App information. Skipping process..."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function Copy-ToUSB([string] $fileToCopy)
|
|
|
|
function Copy-ToUSB([string] $fileToCopy) {
|
|
|
|
{
|
|
|
|
|
|
|
|
foreach ($volume in Get-Volume) {
|
|
|
|
foreach ($volume in Get-Volume) {
|
|
|
|
if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
|
|
|
|
if ($volume -and $volume.FileSystemLabel -ieq "ventoy") {
|
|
|
|
$destinationPath = "$($volume.DriveLetter):\"
|
|
|
|
$destinationPath = "$($volume.DriveLetter):\"
|
|
|
@ -214,8 +198,7 @@ function Copy-ToUSB([string] $fileToCopy)
|
|
|
|
Write-Host "Ventoy USB Key is not inserted"
|
|
|
|
Write-Host "Ventoy USB Key is not inserted"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [switch] $Directory = $false)
|
|
|
|
function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [switch] $Directory = $false) {
|
|
|
|
{
|
|
|
|
|
|
|
|
if(([string]::IsNullOrEmpty($pathToDelete))) { return }
|
|
|
|
if(([string]::IsNullOrEmpty($pathToDelete))) { return }
|
|
|
|
if (-not (Test-Path -Path "$($pathToDelete)")) { return }
|
|
|
|
if (-not (Test-Path -Path "$($pathToDelete)")) { return }
|
|
|
|
|
|
|
|
|
|
|
@ -240,25 +223,21 @@ function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [sw
|
|
|
|
|
|
|
|
|
|
|
|
$itemsToDelete = [System.Collections.ArrayList]::new()
|
|
|
|
$itemsToDelete = [System.Collections.ArrayList]::new()
|
|
|
|
|
|
|
|
|
|
|
|
if ($mask -eq "")
|
|
|
|
if ($mask -eq "") {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Debug "Adding $($pathToDelete) to array."
|
|
|
|
Write-Debug "Adding $($pathToDelete) to array."
|
|
|
|
[void]$itemsToDelete.Add($pathToDelete)
|
|
|
|
[void]$itemsToDelete.Add($pathToDelete)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
|
|
|
|
Write-Debug "Adding $($pathToDelete) to array and mask is $($mask)"
|
|
|
|
if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory }
|
|
|
|
if ($Directory) { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse -Directory }
|
|
|
|
else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse }
|
|
|
|
else { $itemsToDelete = Get-ChildItem $pathToDelete -Include $mask -Recurse }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
foreach($itemToDelete in $itemsToDelete)
|
|
|
|
foreach($itemToDelete in $itemsToDelete) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$status = "Deleting $($itemToDelete)"
|
|
|
|
$status = "Deleting $($itemToDelete)"
|
|
|
|
Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
|
|
|
|
Write-Progress -Activity "Removing Items" -Status $status -PercentComplete ($counter++/$itemsToDelete.Count*100)
|
|
|
|
|
|
|
|
|
|
|
|
if (Test-Path -Path "$($itemToDelete)" -PathType Container)
|
|
|
|
if (Test-Path -Path "$($itemToDelete)" -PathType Container) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$status = "Deleting directory: $($itemToDelete)"
|
|
|
|
$status = "Deleting directory: $($itemToDelete)"
|
|
|
|
|
|
|
|
|
|
|
|
takeown /r /d $yesNo[0] /a /f "$($itemToDelete)"
|
|
|
|
takeown /r /d $yesNo[0] /a /f "$($itemToDelete)"
|
|
|
@ -267,8 +246,7 @@ function Remove-FileOrDirectory([string] $pathToDelete, [string] $mask = "", [sw
|
|
|
|
icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
|
|
|
|
icacls $itemToDelete /grant "*S-1-5-32-544:(OI)(CI)F" /t /c /q
|
|
|
|
Remove-Item -Force -Recurse "$($itemToDelete)"
|
|
|
|
Remove-Item -Force -Recurse "$($itemToDelete)"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf)
|
|
|
|
elseif (Test-Path -Path "$($itemToDelete)" -PathType Leaf) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$status = "Deleting file: $($itemToDelete)"
|
|
|
|
$status = "Deleting file: $($itemToDelete)"
|
|
|
|
|
|
|
|
|
|
|
|
takeown /a /f "$($itemToDelete)"
|
|
|
|
takeown /a /f "$($itemToDelete)"
|
|
|
@ -379,13 +357,11 @@ function New-Unattend {
|
|
|
|
</component>
|
|
|
|
</component>
|
|
|
|
</settings>
|
|
|
|
</settings>
|
|
|
|
'@
|
|
|
|
'@
|
|
|
|
if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false)
|
|
|
|
if ((Test-CompatibleImage $imgVersion $([System.Version]::new(10,0,22000,1))) -eq $false) {
|
|
|
|
{
|
|
|
|
|
|
|
|
# Replace the placeholder text with an empty string to make it valid for Windows 10 Setup
|
|
|
|
# Replace the placeholder text with an empty string to make it valid for Windows 10 Setup
|
|
|
|
$unattend = $unattend.Replace("<#REPLACEME#>", "").Trim()
|
|
|
|
$unattend = $unattend.Replace("<#REPLACEME#>", "").Trim()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
{
|
|
|
|
|
|
|
|
# Replace the placeholder text with the Specialize pass
|
|
|
|
# Replace the placeholder text with the Specialize pass
|
|
|
|
$unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
|
|
|
|
$unattend = $unattend.Replace("<#REPLACEME#>", $specPass).Trim()
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -472,8 +448,7 @@ function New-FirstRun {
|
|
|
|
$firstRun = @'
|
|
|
|
$firstRun = @'
|
|
|
|
# Set the global error action preference to continue
|
|
|
|
# Set the global error action preference to continue
|
|
|
|
$ErrorActionPreference = "Continue"
|
|
|
|
$ErrorActionPreference = "Continue"
|
|
|
|
function Remove-RegistryValue
|
|
|
|
function Remove-RegistryValue {
|
|
|
|
{
|
|
|
|
|
|
|
|
param (
|
|
|
|
param (
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
|
|
[Parameter(Mandatory = $true)]
|
|
|
|
[string]$RegistryPath,
|
|
|
|
[string]$RegistryPath,
|
|
|
@ -483,30 +458,25 @@ function New-FirstRun {
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Check if the registry path exists
|
|
|
|
# Check if the registry path exists
|
|
|
|
if (Test-Path -Path $RegistryPath)
|
|
|
|
if (Test-Path -Path $RegistryPath) {
|
|
|
|
{
|
|
|
|
|
|
|
|
$registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue
|
|
|
|
$registryValue = Get-ItemProperty -Path $RegistryPath -Name $ValueName -ErrorAction SilentlyContinue
|
|
|
|
|
|
|
|
|
|
|
|
# Check if the registry value exists
|
|
|
|
# Check if the registry value exists
|
|
|
|
if ($registryValue)
|
|
|
|
if ($registryValue) {
|
|
|
|
{
|
|
|
|
|
|
|
|
# Remove the registry value
|
|
|
|
# Remove the registry value
|
|
|
|
Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force
|
|
|
|
Remove-ItemProperty -Path $RegistryPath -Name $ValueName -Force
|
|
|
|
Write-Host "Registry value '$ValueName' removed from '$RegistryPath'."
|
|
|
|
Write-Host "Registry value '$ValueName' removed from '$RegistryPath'."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Host "Registry value '$ValueName' not found in '$RegistryPath'."
|
|
|
|
Write-Host "Registry value '$ValueName' not found in '$RegistryPath'."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
{
|
|
|
|
|
|
|
|
Write-Host "Registry path '$RegistryPath' not found."
|
|
|
|
Write-Host "Registry path '$RegistryPath' not found."
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function Stop-UnnecessaryServices
|
|
|
|
function Stop-UnnecessaryServices {
|
|
|
|
{
|
|
|
|
|
|
|
|
$servicesToExclude = @(
|
|
|
|
$servicesToExclude = @(
|
|
|
|
"AudioSrv",
|
|
|
|
"AudioSrv",
|
|
|
|
"AudioEndpointBuilder",
|
|
|
|
"AudioEndpointBuilder",
|
|
|
@ -573,8 +543,7 @@ function New-FirstRun {
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
$runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name }
|
|
|
|
$runningServices = Get-Service | Where-Object { $servicesToExclude -notcontains $_.Name }
|
|
|
|
foreach($service in $runningServices)
|
|
|
|
foreach($service in $runningServices) {
|
|
|
|
{
|
|
|
|
|
|
|
|
Stop-Service -Name $service.Name -PassThru
|
|
|
|
Stop-Service -Name $service.Name -PassThru
|
|
|
|
Set-Service $service.Name -StartupType Manual
|
|
|
|
Set-Service $service.Name -StartupType Manual
|
|
|
|
"Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
|
|
|
|
"Stopping service $($service.Name)" | Out-File -FilePath c:\windows\LogFirstRun.txt -Append -NoClobber
|
|
|
@ -613,10 +582,8 @@ function New-FirstRun {
|
|
|
|
# Delete Edge Icon from the desktop
|
|
|
|
# Delete Edge Icon from the desktop
|
|
|
|
$edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk"
|
|
|
|
$edgeShortcutFiles = Get-ChildItem -Path $desktopPath -Filter "*Edge*.lnk"
|
|
|
|
# Check if Edge shortcuts exist on the desktop
|
|
|
|
# Check if Edge shortcuts exist on the desktop
|
|
|
|
if ($edgeShortcutFiles)
|
|
|
|
if ($edgeShortcutFiles) {
|
|
|
|
{
|
|
|
|
foreach ($shortcutFile in $edgeShortcutFiles) {
|
|
|
|
foreach ($shortcutFile in $edgeShortcutFiles)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
# Remove each Edge shortcut
|
|
|
|
# Remove each Edge shortcut
|
|
|
|
Remove-Item -Path $shortcutFile.FullName -Force
|
|
|
|
Remove-Item -Path $shortcutFile.FullName -Force
|
|
|
|
Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop."
|
|
|
|
Write-Host "Edge shortcut '$($shortcutFile.Name)' removed from the desktop."
|
|
|
@ -639,8 +606,7 @@ function New-FirstRun {
|
|
|
|
# Create a shortcut object
|
|
|
|
# Create a shortcut object
|
|
|
|
$shortcut = $shell.CreateShortcut($shortcutPath)
|
|
|
|
$shortcut = $shell.CreateShortcut($shortcutPath)
|
|
|
|
|
|
|
|
|
|
|
|
if (Test-Path -Path "c:\Windows\cttlogo.png")
|
|
|
|
if (Test-Path -Path "c:\Windows\cttlogo.png") {
|
|
|
|
{
|
|
|
|
|
|
|
|
$shortcut.IconLocation = "c:\Windows\cttlogo.png"
|
|
|
|
$shortcut.IconLocation = "c:\Windows\cttlogo.png"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|