Loading

域控组策略日常分发、安装、软件的小结

简介:

我们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,就放登录脚本,这是用户级别的软件。

用户路径可以这么写:

$targetExe = $env:USERPROFILE + "\Appdata\*******"

$env:USERPROFILE就是“c:\users\用户名” 目录,每个用户登录后都不一样的。

五:交互安装

交互安装,主要指要输入信息才能安装的软件。
msi一般没见过,exe见过一些,比方说我这里的北信源。
要输入责任人,选择所属部门……
这个就是套AU3的自动化脚本,但是这是模拟鼠标键盘,一旦双击开始这个自动化任务,就要停止使用键盘鼠标,等待自动化任务完成才可以。
加个msgbox,等用户点击确认不能动键盘鼠标以后再继续任务吧。
AU3,你可以将它看成免费的按键精灵,但是抓抓功能似乎和按键精灵各有千秋,按键精灵有抓图,图片比较,AU3有更深层次的windows空间。
好在免费编译exe。按键精灵还要会员才能编译exe。
vb脚本,比较简单,内置函数也很方便我们处理。
抓点,移动鼠标,点击,输入参数。
滚动条最好是找到滚动条下面一点的位置,点击鼠标,点一次移动一组,是可控的。或者找到上下箭头的位置,点一下,也是可控的。

六:使用时要管理员权限

这个就套个RunAsSpc,随便用什么方式给它分发到用户终端,创建个新的快捷方式,指向RunAsSpc即可。

七:高级操作

如果还闲麻烦,也可以做一个标准软件服务器,就是安装所有需要经常升级的软件,并共享安装后的目录和安装文件目录。

检查版本也去检查这个安装后的网络目录,安装文件写成遍历安装文件目录exe来执行。

这时候只需要再标准软件服务器安装软件,并将安装程序复制到对应的安装目录就可以了,当然要删除老的安装文件,这个安装目录是通过遍历来执行的,只有一个最新版的安装文件就好了。

 

不遍历目录,写死安装文件名也行。

 

具体怎么搭积木,就看你的习惯了。

posted @ 2024-05-23 18:50  上官飞鸿  阅读(1953)  评论(2)    收藏  举报