域控組策略日常分發、安裝、軟體的小結

上官飞鸿發表於2024-05-23

簡介:

我們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即可。

相關文章