簡介:
我們IT管理員在有條件的情況下一定要使用域控來對終端進行管控,又免費,又好用。
但是軟體分發安裝確實是我們頭痛的一件事情。具體來說有以下幾個問題。
問題一:MSI/EXE
問題二:管理員許可權是/否。
問題三:軟體數量是多/少。
問題四:手動選裝/策略自動安裝
問題五:版本校驗是/否。
簡單說說我對這些問題的處置方式。
歡迎留言討論
一:MSI格式
這個就簡單了。
管理員許可權可以忽略,因為我們透過域控來安裝。
數量多少並沒有什麼關係,跟執行策略無關。
版本校驗,可以自動處置。
手動選裝,釋出到使用者的軟體安裝中。
自動安裝,分配到計算機的軟體安裝中。
哪些自動安裝,就靠組織單位和策略分配了。
二:EXE格式無需管理員許可權
無需管理員許可權,這就是一個自解壓壓縮包好不。
隨便解壓出來就能用。
這數量多少也沒什麼關係。
手動選裝:你隨便丟到web下載站,讓使用者自己下載安裝就好了。
策略安裝:丟使用者登入指令碼,bat大概如下
\\server\soft\***\***.exe
版本校驗後面一起講。
三:EXE格式需要管理員。
管理員許可權可以套RunAsSpc,生成金鑰檔案。
數量多的話,可以考慮RunAsRob,為目錄許可管理員許可權,當然你要配置只讀的網路目錄,免得被篡改濫用。
手動選裝:我習慣3個檔案打包到winrar自解壓,解壓到臨時目錄,並自動執行RunAsSpc。
策略安裝:計算機啟動指令碼,bat大概如下
\\server\soft\***\***.exe
版本校驗後面一起講。
四:版本校驗
檢查最新安裝後版本
版本校驗我使用powershell指令碼來做。
這個指令碼在管理員電腦檢查最新安裝後檔案的版本,顯示給你。
只要改最後的一個$filePath路徑即可
function GetFileVersionInfo($filePath) { # 檢查檔案是否存在 if (!(Test-Path $filePath)) { Write-Error "檔案不存在: $filePath" return } # 嘗試獲取檔案的版本資訊 try { $fileInfo = Get-Item $filePath $versionInfo = $fileInfo.VersionInfo # 顯示版本資訊 Write-Host "檔案路徑: $filePath" Write-Host "檔案版本: $($versionInfo.FileVersion)" Write-Host "產品版本: $($versionInfo.ProductVersion)" Write-Host "檔案描述: $($versionInfo.FileDescription)" Write-Host "內部名稱: $($versionInfo.InternalName)" Write-Host "原始檔名: $($versionInfo.OriginalFilename)" # ... 這裡可以新增更多版本資訊的屬性,如公司名稱、版權資訊等 } catch { Write-Error "無法從檔案中獲取版本資訊: $_" } } # 示例使用 $filePath = "C:\path\to\your\app.exe" GetFileVersionInfo $filePath
版本比較升級
這個指令碼放域啟動或登入指令碼檢查已安裝到系統的版本,並執行更新命令
修改最後幾行
$targetExe 終端安裝後軟體的路徑
$newVersion = 上一個指令碼顯示的版本
$upgradeCommand = 升級安裝的命令,可以用網路路徑引數"\\server\\software\***.exe /S"
function UpgradeIfNeeded($targetExePath, $newVersion, $upgradeCommand) { # 檢查目標exe檔案是否存在 if (!(Test-Path $targetExePath)) { Write-Host "目標檔案不存在: $targetExePath" Write-Host "由於檔案不存在,將執行升級命令..." } else { # 獲取目標exe檔案的版本資訊 try { $fileVersionInfo = (Get-Item $targetExePath).VersionInfo $currentVersion = $fileVersionInfo.FileVersion # 比較版本號 if ($currentVersion -ne $newVersion) { Write-Host "當前版本: $currentVersion 不等於 新版本: $newVersion" Write-Host "正在執行升級..." } else { # 如果版本匹配,則不需要升級 Write-Host "版本已經是最新的。" return # 退出函式,不執行升級命令 } } catch { Write-Host "獲取版本資訊時發生錯誤: $_" # 即使獲取版本失敗,也假設需要升級(根據您的具體需求) } } # 執行升級命令(這裡假設upgradeCommand是一個完整的命令字串) Invoke-Expression $upgradeCommand Write-Host "升級命令已執行。" } # 示例使用 $targetExe = "C:\path\to\your\app.exe" $newVersion = "1.2.3.4" $upgradeCommand = "C:\path\to\upgrade\script.bat" # 或者其他命令列,比如 msiexec /i upgrade.msi 等 UpgradeIfNeeded -targetExePath $targetExe -newVersion $newVersion -upgradeCommand $upgradeCommand
特別注意
如果安裝路徑在C:\Program Files,就放啟動指令碼,這是計算機級別的軟體。
如果安裝路徑在C:\Users,就放登入指令碼,這是使用者級別的軟體。
五:互動安裝
互動安裝,主要指要輸入資訊才能安裝的軟體。
msi一般沒見過,exe見過一些,比方說我這裡的北信源。
要輸入責任人,選擇所屬部門……
這個就是套AU3的自動化指令碼,但是這是模擬滑鼠鍵盤,一旦雙擊開始這個自動化任務,就要停止使用鍵盤滑鼠,等待自動化任務完成才可以。
加個msgbox,等使用者點選確認不能動鍵盤滑鼠以後再繼續任務吧。
AU3,你可以將它看成免費的按鍵精靈,但是抓抓功能似乎和按鍵精靈各有千秋,按鍵精靈有抓圖,圖片比較,AU3有更深層次的windows空間。
好在免費編譯exe。按鍵精靈還要會員才能編譯exe。
vb指令碼,比較簡單,內建函式也很方便我們處理。
抓點,移動滑鼠,點選,輸入引數。
捲軸最好是找到捲軸下面一點的位置,點選滑鼠,點一次移動一組,是可控的。或者找到上下箭頭的位置,點一下,也是可控的。
六:使用時要管理員許可權
這個就套個RunAsSpc,隨便用什麼方式給它分發到使用者終端,建立個新的快捷方式,指向RunAsSpc即可。