PowerShell:移除個人版Skype8.X

前言:個人版Skype安裝起來看似一個很普通的應用程式,新增移除程式裡面看的到,機碼裡面找的到,但是如果想透過一些Powershell的一些標準方式來佈署大量移除又沒有辦法,例如Get-WmiObject Win32_Product篩選出Skype後移除,卻又完全Get不到Skype有裝在裡面的痕跡。嘗試使用Get-AppxPackage卻也完全找不到Skype。所以只好透過一些Powershell的判斷來執行反安裝程式並且自動帶入管理員帳號密碼。
下面的Script包含了寫入Log與檢查機碼,比較適合公司使用。

GlobalVar.txt>此文字檔只放下面兩行即可
FSRV_A=\\11.22.33.44
FSRV_B=\\11.22.33.55
REM RemoveSkypeHome.bat
echo off
for /f "delims== tokens=1,2" %%G in (%~dp0GlobalVar.txt) do set %%G=%%H
REM 全域變數,檔案伺服器位置
IF EXIST C:\Tools GOTO :CopyPs1 
mkdir c:\tools
:CopyPs1 
cls
copy "%FSRV_A%\update\RemoveSkypeHome*.ps1" "c:\tools\"
REM 複製所需的Powershell到本機
copy "%FSRV_A%\update\GlobalVar.txt" "c:\tools"
REM 複製縮需的全域變數檔案到本機
powershell c:\tools\RemoveSkypeHome.ps1
REM 執行Powershell
pause
erase c:\tools\RemoveSkypeHome*.ps1 /f
erase c:\tools\GlobalVar.txt /f
REM 刪除剛剛所複製過來的檔案
#RemoveSkypeHome.ps1
Remove-Variable * -ErrorAction SilentlyContinue#清除所有變數
Get-Content $PSScriptRoot\GlobalVar.txt | Foreach-Object{
    $var = $_.Split('=')
    New-Variable -Name $var[0] -Value $var[1]
 }
#以上為全域參數判斷檔案伺服器的IP位置,內有變數FSRV_A和FSRV_B值
$UserN = "$env:USERNAME"
$LogFile = "Record_RmSkypeHome"
$LogPath = "$FSRV_A\share\IT\CSV_Log\"
Function LogWrite
{
    Param([string]$logstring)
    [String]$Logfile = $LogPath+$LogFile+".CSV" 
    Add-content $Logfile "$(Get-date -Format 'yyyy-MM-dd HH:mm:ss') $logstring" 
}
#以上為Log寫入功能

Function Test-RegistryValue {
    param(
        [Alias("PSPath")]
        [Parameter(Position = 0, Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
        [String]$Path
        ,
        [Parameter(Position = 1, Mandatory = $true)]
        [String]$Name
        ,
        [Switch]$PassThru
    ) 

    process {
        if (Test-Path $Path) {
            $Key = Get-Item -LiteralPath $Path
            if ($Key.GetValue($Name, $null) -ne $null) {
                if ($PassThru) {
                    Get-ItemProperty $Path $Name
                } else {
                    $true
                }
            } else {
                $false
            }
        } else {
            $false
        }
    }
}
#以上為檢查註冊機碼Function
$CHKSkyHomeRun = Test-RegistryValue -PSPath "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Skype for Desktop"
$CHKSkyHome = Test-Path -path "C:\Program Files (x86)\Microsoft\Skype for Desktop\unins000.exe"
IF(!($CHKSkyHome))#如果反安裝檔案位置不存在
{
    if(!($CHKSkyHomeRun))#如果Skype啟動機碼不存在
    {
        $Type = "Skype not installed"
    }
    ELSE
    {
        Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Skype for Desktop" -ErrorAction SilentlyContinue#移除Skype啟動機碼(通常是移除軟體後沒有正常移除登入後啟動造成的)
        $Type = "Skype not install. Startup reg is removed"
    }
    
    LogWrite ",$UserN,$env:COMPUTERNAME,$Type"#寫入Log
    Exit
}

$Username = "abc\Admin_XXXXX"#管理員權限帳號
$Password = "XXXXXXXXXX"#管理員權限密碼
$pass = ConvertTo-SecureString -AsPlainText $Password -Force
$Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass 
$Sub = "C:\tools\RemoveSkypeHome_Sub.ps1"

Remove-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\CurrentVersion\Run" -Name "Skype for Desktop" -ErrorAction SilentlyContinue#移除Skype啟動機碼
(Start-Process powershell -ArgumentList "-ExecutionPolicy ByPass -file $Sub" -WorkingDirectory "$FSRV_A\update\" -Credential $Cred -PassThru).WaitForExit()
$Type = "Skype removed"#執行反安裝Powershell
LogWrite ",$UserN,$env:COMPUTERNAME,$Type"
#RemoveSkypeHome_Sub.ps1#執行反安裝程式
Start-Process "C:\Program Files (x86)\Microsoft\Skype for Desktop\unins000.exe"