從SCCM中建立並運行Powershell腳本卸載軟件

最近碰到一個需求:針對全部電腦卸載某個小軟件,但這個軟件並非SCCM部署,有的是用戶本身安裝的,有的是系統部署時就已經封裝好的,版本繁多,安裝路徑也不同!shell

首先想到的固然是用Powershell來作,前後測試了用Get-apppacke\get-appxpacke, Get-WmiObject -Class win32_product等幾種方法都不行,最後用找註冊表中的UninstallString的方式解決!express

 

方法以下:安全

一、 先用PowerShell定位到註冊表位置,app

X86 Script:ide

Set-Location HKLM:\software\microsoft\Windows\Currentversion\uninstall測試

X64 Script:ui

Set-Location HKLM:\software\WOW6432Node\microsoft\Windows\Currentversion\uninstall操作系統

二、 查詢到軟件安裝後在註冊表Uninstall中的名稱,如:Chrome,在Uninstall中的Childitem名爲:Google Chrome,其中Uninstallstring有卸載的運行文件具體路徑、此文件名及參數:3d

"C:\Program Files (x86)\Google\Chrome\Application\74.0.3729.131\Installer\setup.exe" --uninstall --system-level --verbose-loggingblog

image

這就是咱們要運行的卸載命令,有些軟件只有執行文件,並不帶參數,如Teamviewer 只有一個Uninstall.exe,咱們可使用Uninstall.exe /S進行靜默卸載!

image

三、 完整的PS腳本以下:

Set-Location

HKLM:\software\WOW6432Node\microsoft\Windows\Currentversion\uninstall

#指定註冊表的位置

$UninstallTeamviewer =  get-childitem -path *Teamviewer* | get-itemproperty | %{$_.Uninstallstring}

#查找卸載命令並賦值給變量:$UninstallTeamviewer

start $UninstallTeamviewer /S

#Powershell中運行卸載命令:$UninstallTeamviewer

針對註冊表中已有卸載程序和參數的,上面不用再加參數數:「/S」

四、 建立腳本:在SoftWare Library\Overview\Scripts中右鍵、Create Script:

image

五、 將PowerShell腳本貼到腳本,下一步,完成!

TeamViewer

$OS = (Get-WmiObject Win32_OperatingSystem).OSArchitecture

    #檢查操做系統版本

if ((gwmi win32_operatingsystem | select osarchitecture).osarchitecture -eq "32-bit"){

    #32 Bit 運行如下步驟

Set-Location HKLM:\software\microsoft\Windows\Currentversion\uninstall

    #指定如下注冊表位置

$UninstallTeamviewer = get-childitem -path *Teamviewer* | get-itemproperty | %{$_.Uninstallstring}

    #查找卸載命令並賦值給變量:$UninstallTeamviewer

start $UninstallTeamviewer /S

    #Powershell中運行卸載命令:$UninstallTeamviewer

$UninstallTeamviewer

    #輸出變量結果,方便查詢分析

}

else{

    #64 Bit 運行如下步驟

Set-Location HKLM:\software\WOW6432Node\microsoft\Windows\Currentversion\uninstall

    #指定如下注冊表位置

$UninstallTeamviewer = get-childitem -path *Teamviewer* | get-itemproperty | %{$_.Uninstallstring}

    #查找卸載命令並賦值給變量:$UninstallTeamviewer

start $UninstallTeamviewer /S

    #Powershell中運行卸載命令:$UninstallTeamviewer

$UninstallTeamViewer

    #輸出變量結果,方便查詢分析

}

image

六、 覈准腳本:在剛建立的腳本上點右鍵、批准

image

在生產環境中,爲了安全,用戶建立的腳本須要第二人來批准(即本身不能批准本身建立的腳本),若是想本身批准本身的建立的腳本,請在進到:Administration\Site Configuration\Sites\Hierarchy Settings,

image

將「Script authors require additional script approver前面的勾取消。

七、 運行腳本:在須要運行的電腦或集全中點右鍵,選擇:Run Script\Next,即開始運行。

image

八、 在Monitoring中也能夠查看已運行的腳本彙總結果 ,在「腳本狀態」列表中,能夠查看在客戶端設備上運行的每一個腳本的結果。 腳本退出代碼爲「0」一般表示腳本已成功運行。

image

九、 也能夠晚點再去軟件報告裏進行查詢!

十、 若是針對某個軟件是使用MIS封裝包安裝的,Uninstall值會是「MsiExec.exe /I {23170F69-40C1-2701-1602-000001000000}「,就要改另外一種PowerShell方式,例:

if ((gwmi win32_operatingsystem | select osarchitecture).osarchitecture -eq "32-bit"){

#32 Bit 7zip X32 1602 {23170F69-40C1-2701-1602-000001000000}

$script = { invoke-expression "msiexec /qn /x '{23170F69-40C1-2701-1602-000001000000}' "}

Invoke-Command -ScriptBlock $script

$script

}else{

#64 Bit 7zip X64 1602 {23170F69-40C1-2702-1602-000001000000}

$script = { invoke-expression "msiexec /qn /x '{23170F69-40C1-2702-1602-000001000000}' "}

Invoke-Command -ScriptBlock $script

$script

}

固然,若是沒有SCCM環境,也能夠嘗試用在AD中調用上面的腳本!

相關文章
相關標籤/搜索