域控组策略日常分发、安装、软件的小结
简介:
我们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来执行。
这时候只需要再标准软件服务器安装软件,并将安装程序复制到对应的安装目录就可以了,当然要删除老的安装文件,这个安装目录是通过遍历来执行的,只有一个最新版的安装文件就好了。
不遍历目录,写死安装文件名也行。
具体怎么搭积木,就看你的习惯了。

浙公网安备 33010602011771号