当我在第一份工作中担任管理员时,我感到很沮丧,因为我们使用 Windows 服务器的管理流程是一系列点击操作;我们永远无法与 Unix 服务器的效率水平相媲美,因为 Unix 服务器有一组 shell 脚本可以自动完成很多工作。我很快就阅读了有关 WSH 和分布式系统集成并且很快就学会了用脚本能够实现多少自动化。
但有一个很大的问题——几乎没有我的 Windows 同事真正对学习脚本感兴趣。他们似乎对手动点击鼠标的琐事很满意,从未对使用脚本代替他们完成工作的前景感到兴奋。尽管效率明显提高,但我还是很难说服他们学习脚本技能。此后,我辞去了那份工作,开始从事全职软件开发职业。
近十年来,我在不同环境和不同客户中工作,但我仍然遇到 Windows 管理员主要具有这种普遍的“情绪”,即他们会尽可能避免编写脚本。尽管 Windows 服务器技术的可访问性水平不断提高,但脚本和自动化仍在不断开放。我几乎可以肯定,大多数管理员之所以成为管理员,正是因为他们绝对恨执行任何类型的编程职责。有哪些方法可以鼓励和激励管理员编写脚本真的可以从长远来看能帮助他们吗?
答案1
作为一名 Unix 和 Windows 管理员,很多Unix 脚本很少见,而 Windows 脚本很少见,我想说,部分原因是 Windows 脚本实用程序和 API 非常笨拙,而且在 Windows 机器上远程运行很困难(也许用不明显这个词更合适)。
我的意思是,这到底是什么鬼?
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
我认为,部分问题在于是API。在 Unix 下,管理员主要编写他们已经使用的命令行实用程序的自动化脚本。在 Windows 下,您必须使用每个级别都不熟悉的 API。例如,“模拟”是什么意思?对于 Unix 管理员来说,这是一个微不足道的概念,他们可能已经使用 sudo 和 su 并且熟悉 setuid 脚本。但 Windows 管理员不太可能熟悉其中任何内容;他们可能知道“runas”(或等效的 GUI 选项),但当他们需要执行某些管理员操作时,他们更有可能以管理员身份登录。
而且 Windows 中有关脚本的文档非常糟糕。首先,它更像是“解释性语言”,而不是脚本,同样是因为它们使用的是(不熟悉的)API,而不是它们已经熟悉的命令。但我认为,我从未在 Microsoft 的文档中找到任何有用的东西,除非找到一个已经做过与我想要的接近的事情并给我指明正确方向的人。似乎没有一个地方列出你可以做的事情。就好像你必须已经熟悉 Windows 内部结构才能做最基本的事情一样。
并不是说 Unix 脚本看起来不像是线路噪音。但是 Unix 管理员可以从一个只运行他已经知道的简单命令的脚本开始。(“我总是必须连续运行这三个命令。如果我将它们放在一个文件中,我可以用一个命令完成!”)然后他可以在熟悉情况后继续前进。相比之下,管理员无法编写脚本“以管理员身份登录服务器;单击“开始”→“设置”→“控制面板”;双击“系统”;单击“计算机名称”选项卡;等等”。是的,他试图获取的任何内容可能通过某个 API 呈现,但他无法逐步找到它。
因此,要回答“我们如何让 Windows 管理员编写更多脚本?”这个问题,答案是让脚本不那么陌生。如何做到这一点,我不知道。
老实说,答案在微软手中。他们没有理由不能使用命令行实用程序来完成通过 GUI 完成的所有工作。(实际上现在有很多这样的实用程序,但它们没有宣传,文档记录不全,而且不一致。)也没有理由不在 GUI 中提示该按钮的实际功能。提供工具提示来显示正在修改的 API 对象。或者在帮助窗口中记录它。
保护用户免受内部组件的影响并没有问题,但是 Windows 似乎不遗余力地隐藏这些内部组件,甚至对那些想要找到它们的人也是如此。
答案2
给他们一个只能通过脚本完成的任务 - 例如,我曾经必须编写脚本来创建数百个文件夹并为每个文件夹设置自定义权限,并且必须每天更新。如果他们手动执行此操作,那将是他们唯一的工作。该脚本使用 CACLS 等根据分隔文本文件的输出重置权限,花了大约一天的时间才完善(基本脚本大约在一小时内完成)。
当您开始了解使用脚本可以做什么时,这将是一个巨大的胜利。
答案3
我曾经雇佣过一位系统管理员,他完全拒绝做任何“编程”,我试图以身作则,向他展示如何以身作则。我能从他那里得到的最好的东西就是使用现有代码并修改变量赋值或主机名等来完成工作。有些人根本不关心编程,所以你需要为他们降低门槛。
微软正在努力实现这一点。在 SQL Server 中,现在人们已经能够单击 Management Studio GUI 中的内容,然后转储出刚刚完成操作的 T-SQL 脚本。这很棒,尤其是对于不太擅长编程的 Windows 系统管理员来说。
我注意到 System Centre Virtual Machine Manager 具有相同的查看脚本功能,只不过它会转储出 powershell 脚本。我认为许多其他产品线也正在引入此功能。
如何激励管理员编写脚本?这很难说,一个好的管理员是一个懒惰的管理员,这意味着一个会尽可能多地编写脚本的管理员。有时间点击东西的管理员效率不高!让您的管理员承担太多工作,他们别无选择,只能编写脚本。
答案4
我信奉的座右铭是“巧干而不苦干”。重复执行任何流程意味着通常有一种方法可以编写脚本,通过鼠标单击、bash 脚本或其他方法自动完成。在我看来,这可以让我腾出时间去做更重要的任务,而这些任务并不是系统管理的“体力劳动”。
那些不想写脚本的人脑子里可能有好几种想法。也许他们喜欢 GUI 界面,不想学习命令行或编程。也许他们认为写脚本基本上是在贬低自己的自尊心。不管怎样,我都不想拥有这样的员工,不愿意写任何脚本就表明了他们是什么样的员工。我宁愿要一个解决问题的人,而不是一个“愚蠢的”系统管理员。
至于鼓励和激励他们,我想说,只要效仿你的做法,展示生产力的提高以及它如何使他们的工作更轻松。对于一些人来说,成为 Windows 系统管理员只是一份薪水,很难激励他们摆脱过去 10 年来一直有效的点击思维模式。