一眼就能知道你的 Mac 客户端是否是最新的

一眼就能知道你的 Mac 客户端是否是最新的

我们拥有一千多个 Mac 客户端,偶尔会发布影响许多或所有客户端的更改(例如安装新软件、创建本地用户帐户或应用更新)。 我想知道你用什么方法可以一目了然地了解你的客户是否是最新的因为我们发现,当一些机器错过更新时,它会给我们带来很坏的影响:)

发布更改:我指的是使用一个可以推送更改的系统,例如 Casper、Puppet、radmind、Apple Remote Desktop,甚至是黑客编写的支持 ssh 的expect脚本。

至于“一目了然”,我主要会浏览两个地方(特别是如果从发布更改的系统中获取的信息不是很明显的话):

  • 走进计算机实验室并查看屏幕(即使距离很远)
  • 通过 Apple Remote Desktop 扫描实验室并查看四个自定义字段。

我认为一个简单的改变就是更改登录屏幕背景, 或者更改登录窗口上的文本。更强大的方法可能是采用标准桌面背景并制作带注释的副本(可能上面有一些点或文本,以表示它所经历的更改)。[有人知道如何做到这一点吗,或者我应该将其作为单独的问题提出,无论是在这里还是在 stackoverflow 上?]

另一个简单的更改是设置四个 ARD 字段之一,如下所示:

defaults write /Library/Preferences/com.apple.RemoteDesktop Text4 "`date +%Y-%m-%d`"

那么,您要做什么才能知道您的客户是否是最新的(或者,如果您知道如何做,您想做什么?)

答案1

我不确定这是否正是您所想的,但无论如何我还是愿意分享它。

如果可以通过在系统上运行终端命令来判断机器是否是最新的,那么您可以编写自己的自定义 Nagios 插件来自动执行检查。这将涉及在每个系统上拥有一个 SSH 密钥,以允许 nagios 以非特权用户身份登录并运行检查命令。

我认为实现此目的的一个非常简单的方法是让您的更新始终在预定义的位置留下某种字符串。然后在 Nagios 服务器上有一个包含“最新”字符串的文件。然后插件只需根据 Nagios 服务器上的“最新”标志检查机器上的标志。然后您可以观察更新在 Nagios 上的传播,并快速查看哪些机器是最新的,哪些不是最新的。

如果您想避免机器离线时出现大量错误消息,您可以让插件在连接失败时返回警告而不是错误,并将检查通知设置为在警告状态下不触发,仅在失败状态下触发。也许更简单的方法是,您可以在需要进行检查时从 Nagios GUI 中打开和关闭检查,而不是一直让它运行。

或许值得深思。

答案2

你可以使用以下命令从命令行获取应用程序版本

for app in /Applications/*.app; do 
  name=`basename "$app" .app`
  ver=`cat "$app/Contents/Info.plist" |grep -A1 CFBundleShortVersionString | tail -1 | sed -e 's/.*<string>//;s/<.*//'`
  echo "$name:$ver"
done

虽然并非每个应用程序都在 info.plist 文件中使用该标识符

答案3

当您的计算机上已经有您想要用作背景的图像时,该脚本将设置它并通知登录窗口重新加载并显示该图像(如果没有人以图形方式登录)。

#!/bin/bash
# This script changes the background image on the login window
# Pass in the image name as the first parameter, or adjust it here:
NEW_IMAGE="/Library/Desktop Pictures/Nature/Earth Horizon.jpg"

if [[ "$1" != "" ]] ; then NEW_IMAGE="$1" ; fi

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

# Change the desktop background
defaults write /Library/Preferences/com.apple.loginwindow DesktopPicture "$NEW_IMAGE"

# Restart the login window if there are no graphical users logged in
# (If there is someone logged in, the display will change when they log out)
if [ "`who | grep -c console`" -eq "0" ] ; then 
    killall -SIGHUP loginwindow 
fi

相关内容