最近碰到一個需求:針對全部電腦卸載某個小軟件,但這個軟件並非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
這就是咱們要運行的卸載命令,有些軟件只有執行文件,並不帶參數,如Teamviewer 只有一個Uninstall.exe,咱們可使用Uninstall.exe /S進行靜默卸載!
三、 完整的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:
五、 將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
#輸出變量結果,方便查詢分析
}
六、 覈准腳本:在剛建立的腳本上點右鍵、批准
在生產環境中,爲了安全,用戶建立的腳本須要第二人來批准(即本身不能批准本身建立的腳本),若是想本身批准本身的建立的腳本,請在進到:Administration\Site Configuration\Sites\Hierarchy Settings,
將「Script authors require additional script approver前面的勾取消。
七、 運行腳本:在須要運行的電腦或集全中點右鍵,選擇:Run Script\Next,即開始運行。
八、 在Monitoring中也能夠查看已運行的腳本彙總結果 ,在「腳本狀態」列表中,能夠查看在客戶端設備上運行的每一個腳本的結果。 腳本退出代碼爲「0」一般表示腳本已成功運行。
九、 也能夠晚點再去軟件報告裏進行查詢!
十、 若是針對某個軟件是使用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中調用上面的腳本!