如何在Mac OS X 10.6下使用脚本自动化新系统配置?

4

我已经花了几天时间努力寻找正确的参考资料,但仍然无法使其正常工作。

我的想法是编写一个脚本,用于对新购买的 Mac 进行基线配置,例如关闭自动登录,创建一个新的管理员用户(供远程管理员进行支持访问,设置密码以解锁屏幕保护等)。

管理员需要在每台新机器上执行以下基线配置清单:

  • 点击“登录选项”按钮,将“自动登录”设置为“关闭”
  • 勾选:显示重新启动、睡眠和关闭按钮
  • 取消勾选:在登录窗口中显示输入菜单
  • 取消勾选:显示密码提示
  • 取消勾选:在登录窗口使用语音提示
  • 勾选:显示快速用户切换菜单为短名称

    (注意:这只是要在每台机器上执行的长列表的一部分)

我已经找到了一些参考资料,使其中的某些部分可以正常工作。

例如,可以使用以下命令关闭自动登录:

defaults write /Library/Preferences/.GlobalPreferences com.apple.userspref.DisableAutoLogin -bool TRUE

我有一些方法可以通过AppleScript和shell命令创建新用户(包括提示),但通常很难找到简单的方法,例如打开密码以退出屏幕保护程序或允许快速用户切换。参考资料要么太少,要么就无从得知(例如,我可以通过cli取消自动登录,但系统偏好设置中“显示重新启动、睡眠和关闭按钮”的下一项设置在其他地方,我找不到任何命令行来设置它)。是否有人有一个列表、文档、参考资料或任何关于系统中每个设置所在位置的信息,这样我就可以被指引去使它工作?或者以上示例的样本脚本......非常感谢您阅读到这里,谢谢那些拥有以上信息的人。
2个回答

3
一般来说,各种设置的位置通常没有记录,但通常不太难找到。
其中一种方法是更改设置并观察哪个文件被修改。fseventer 很适合这个任务,或者如果您安装了Xcode,可以使用Packagemaker(开始快照包,更改设置,然后停止录制并查看在快照中列出的哪些文件已更改),或只需运行sudo fs_usage -ew(并浏览其大量输出)。
一旦找到相关的文件,反复更改设置以查看它们如何更改。如果文件是.plists,则可以使用defaults在之前和之后进行转储并比较,或者使用plutil -convert xml1将它们从二进制转换为可读的XML格式,并通过肉眼比较。请注意,有时需要进行多次更改;例如,当禁用自动登录时,您确实应该从/Library/Preferences/com.apple.loginwindow.plist中删除autoLoginUser密钥,并且还要删除文件/etc/kcpassword。
另一种查找可配置设置的方法是利用苹果的基于服务器的首选项工具Workgroup Manager。您可以在非服务器上安装Apple的服务器管理工具,并在本地进行操作:
  • 运行/Applications/Server/Workgroup Manager.app
  • 当它要求连接到服务器时,选择Server > View Directories菜单选项
  • 作为管理员进行身份验证(顶部右侧附近的挂锁按钮)
  • 选择计算机帐户列表(位于靠近左上方的小标签行中的矩形图标)
  • 创建一个虚拟计算机帐户(在工具栏中单击New Computer按钮)
  • 切换到偏好管理部分(在工具栏中单击Preferences按钮)
  • 将会有一堆可管理的偏好类别(您提到的大多数都将在登录部分),选择您感兴趣的内容
  • 切换到详细信息选项卡,您将能够看到正在受控制的首选项域(基本上是.plist文件名)和首选项键。
您还可以获取应用程序的其他设置(超出“概述”选项卡中的设置) ,其中包括首选项清单:在“详细信息”下,单击“+”按钮,选择应用程序,然后打开相关的首选项域并尝试向各个部分添加键;如果该应用程序有清单,则单击首选项键名称将会弹出可用键的弹出菜单,选择一个键将自动填充值类型、默认值和它所做的描述。/System/Library/CoreServices/ManagedClient.app 的清单具有一些非常有趣的选项,请查看一下。
某些设置是每个用户的,这意味着如果您想将它们应用于现有帐户,您将不得不编写脚本以更改 /Users/*/Library/Preferences/whatever,并且可能还要编辑用户模板(/System/Library/User Template/English.lproj/Library/Preferences/whatever),以便随后创建的帐户将获得这些设置。此外,一些设置既是每个用户的是每台计算机的;这些设置存储在~/Library/Preferences/ByHost 中,文件名中带有计算机 ID(以太网 MAC 地址或硬件 UUID);使用defaults -currentHost来设置这些设置。
如果您要对一个文件进行大量更改(例如登录窗口偏好设置),则简单地复制一个预先调整过的设置文件而不是修改现有文件可能更容易。
有关更好的脚本创建帐户的方法,请参见this serverfault question,或查看随instadmg包含的createUser软件包脚本。
如果你需要部署很多相似的电脑,那么将它们制作成镜像可能比逐个设置更加值得考虑。可以查看苹果公司的系统映像工具DeployStudio以及afp548上的各种讨论和工具。还有一个苹果培训班(声明偏见:我是这个班级的培训师之一,所以我认为每个人都应该参加),或者你也可以单独购买课程参考书

编辑:我忘了提到systemsetupnetworksetup命令——对于它们涵盖的设置,它们是最佳选择。


哇,这几乎涵盖了手头工作所需的一切。非常感谢。我已经开始尝试 UI 脚本编写,但是在不同机器上似乎有些变化。当机器之间存在细微差异时,强制执行步骤会更加困难(例如管理员对某些内容进行了更改,导致脚本无法正常运行)。只是想探索一下这个方向——我将回归 shell 脚本路径,因为它似乎更加可靠和一致。 - deeviate
1
@deeviate UI 和shell脚本不是互斥的;你可以使用“do shell script”从AppleScript中运行shell代码,或使用“osascript”从shell中运行AppleScript。例如:response="$(osascript -e 'tell application "System Events"' -e 'activate' -e 'display dialog "There are system updates that need to be installed on your computer; plaease log out for a while." buttons { "Cancel", "OK, I'"'"'ll log out" } giving up after (300)' -e 'end tell' 2>&1)" - Gordon Davisson
在深入研究UI脚本之后,我发现将其与Shell脚本协同工作是一件令人愉悦的事情。如果你不介意,我正在尝试做一件事:是否有一种方法可以“检测”复选框或单选按钮是否已经选中,并在选中时继续进行下一步? - deeviate
1
@deeviate 我没有尝试过控制其他程序UI的脚本编写,但据我所知,关键是启用辅助设备访问权限。请参阅这个MacRumors讨论,特别是最后一篇帖子,了解详情。 - Gordon Davisson
你对问题的解释很好,还附带了链接收集,你应该得到更多的积分。非常棒,非常感谢! - deucalion

0

我不知道在哪里可以找到权威的文档...也许在developer.apple.com或系统管理员认证学习指南中可以找到。但是我可以告诉你,输入菜单和密码提示位于域/Library/Preferences/com.apple.loginwindow中,分别使用键showInputMenu(布尔值-关闭为false或无键)和retriesUntilHint(整数,>=1为开启,0或不存在为关闭)。

您始终可以使用defaults domain列出所有可用的默认域,然后尝试推理出您认为某些内容可能在哪个域中。或者您可以尝试defaults find <somestring>,但有时设置可能很难找到,因此仅转储疑似域会更容易。当然,如果默认值要关闭,则键可能根本不存在...因此,如果您必须使用此方法...请先打开所有内容,以便设置键。


谢谢你的提示!defaults read 确实返回了大量信息,但需要使用grep来过滤出相关的内容。至少这是朝着正确方向迈出的一步 - 谢谢! - deeviate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接