如何鼓励Windows管理员选择脚本?[关闭]


26

当我在第一份工作中担任管理员时,我感到沮丧的是,我们对Windows服务器的管理过程是一系列的点击操作。我们永远无法将Unix服务器的效率水平与Unix服务器相提并论,后者具有一组Shell脚本来自动执行许多工作。我很快就读到有关WSH和ADSI的信息,并且不花时间学习用脚本可以实现多少自动化。

但是,这是一个很大的问题-我的Windows同事几乎没有一个真正对学习脚本感兴趣。他们似乎对手动单击鼠标的琐事感到满意,并且从未为使用脚本代表他们完成工作的前景感到兴奋。尽管效率明显提高,但我还是很难说服他们掌握脚本技能。此后,我离开该职位去从事全职软件开发生涯。

在各种环境和不同的客户中工作了将近十年,我仍然遇到Windows管理员,他们主要具有这种一般的“心情”,他们会尽可能避免编写脚本。尽管可访问性水平不断提高,但Windows服务器技术仍在为脚本和自动化开放。我几乎可以肯定,大多数管理员都是管理员,因为他们绝对讨厌执行任何类型的编程职责。有什么方法可以鼓励和激励管理员脚本可以从长远来看可以真正帮助他们?

Answers:


21

作为一名执行大量 Unix脚本并且几乎没有Windows脚本的Unix和Windows管理员,我想说这部分是由于Windows脚本实用程序和API令人难以置信的笨拙以及难度(也许是非显而易见的)。更好的说法)是在Windows计算机上远程运行事物。

我的意思是,这是WTF吗?

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似乎竭尽全力主动地隐藏那些内部攻击,即使是对于那些想要找到它们的用户也是如此。


16
相反,这是WTF吗? ls -1 *old* | awk '{print "mv "$1" "$1}' | sed s/old/new/2 | sh
squillman

4
在您开始弄清楚Windows脚本(尤其是VB)之前,很难理解这一点。PowerShell的运行方式已经走了很长一段路要走,以使其更加易于管理。它比VBS更接近Bash脚本。
Zypher

2
顺便说一句-只是扮演魔鬼的提倡者:) WMI太丑了……
squillman

1
大声笑。首先,到底谁会这么做?其次,管理员至少已经熟悉ls。第三,我会考虑sed并且awk要相对高级一些,并且肯定与我正在谈论的Windows API处于同一领域。三分之一,虽然一些(许多)Unix脚本命令很复杂,但是您不必从那里开始— 您可以做一些简单的事情,例如只列出您已经熟悉的—命令。相反,如果您想使用Windows进行几乎所有操作,则需要先扩展此庞大的学习曲线。不过,更新答案。
wfaulk

3
我喜欢这样的方式,当您在Exchange 2007的GUI中执行某些操作时,它只会生成一个PowerShell脚本并运行它。
理查德·加兹登

8

给他们一个实际上只能通过脚本完成的任务-例如,我曾经不得不为数百个文件夹的创建和每个文件夹的自定义权限编写脚本,并且必须每天对其进行更新。如果他们手动执行此操作,那将是他们唯一的工作。该脚本除其他外还使用CACLS根据分隔的文本文件的输出来重置权限,该脚本花费了一天的时间来完善(基本脚本在大约一个小时内完成)。

当您开始看到可以使用脚本做什么时,这可能是一个巨大的胜利。


+1好点,有些事情无法通过指向和单击来完成。
squillman

是的,我当时写回的脚本可以自动创建目录,DACL权限,IIS站点设置等。但是,我的同事并没有为此感到兴奋。他们花了整整两个月的时间来学习其中之一,以学习如何编写脚本函数以字符串格式返回日期。
icelava

您可能知道,PS不使用CACLS,XCACLS,否则您的ACL继承会中断。
理查德·加兹登

5

我曾经雇用一名系统管理员,他完全拒绝执行任何“编程”,我试图向他展示以身作则的方法。我最好的解决方法是使用现有代码并修改变量分配或主机名等。完成工作。有些人只是不喜欢编程,因此您需要降低他们的障碍。

微软正在介入。在SQL Server中,现在有一段时间可以单击Management Studio GUI中的内容,然后转储刚刚完成的t-sql脚本。这非常好,特别是对于不太喜欢编程的Windows sysadmin。

我注意到,System Center Virtual Machine Manager具有相同的视图脚本功能,只是它会转储Powershell脚本。我认为许多其他产品线也在引入这一点。

如何激励管理员编写脚本?艰难的召唤,好的管理员就是懒惰的管理员,这意味着管理员将尽可能地编写脚本。有时间点击内容的管理员效率不高!繁琐的工作使您的管理员不堪重负,他们别无选择,只能编写脚本。


你怎么敢叫我懒?哦,等等...
squillman

6
懒惰是系统管理员的美德!
尼克·卡瓦迪亚斯

Helllllll是的!
squillman

2
以我的经验,大多数管理员只是继续在手动单击上超负荷工作,并且比以往花费更长的时间来完成他们的工作。:-)我认为懒惰有不同的类别,有些懒惰,只是想无脑地点击。有些人懒惰地点击并考虑减少这种情况。
icelava

在这一点上,您向他们展示了如何用一些代码替换他们的工作,他们羞愧而哭泣并改变了他们的方式……或者在这种情况下您不解雇他们。
尼克·卡瓦迪亚斯

4

我完全同意您的职务。不幸的是,我认为没有管理层和使用脚本强制实施的流程的支持,没有什么可以做的。只要有选择,人们总是会去熟悉和轻松。有时,这似乎是一个消极点,但是有时简单和熟悉会有所帮助。

一方面,Windows系统隐式意味着简单/容易,而Unix / Linux系统则更加困难和宽容。那么谁能责怪管理员走最少阻力的道路呢?尽管您(或我)或许多其他人可能认识到脚本编写的力量,但人们最终还是会以一种或另一种方式学习。通常,坚持脚本编写的管理员会学到很难的方法。我喜欢更聪明地工作,其他人可能只是喜欢工作。

有什么方法可以鼓励和激励管理员脚本可以在长期内真正帮助他们?

我曾经认为您可以激励人们,但实际情况是,除非您由他们负责,否则成功“激励”的可能性就非常低。这些天我的态度是:那些想学习的人,我会帮助的。不要成为没人想要的产品的推销员,无论他们是否需要它。当您仅出于动机(出于某种原因)帮助/教导一个人时,他们将成为变革的催化剂。不是你。只是我的两分钱。


1
+1您可以带领一匹马入水...
squillman

2
...但是你不能让他滑水。
osij2is

@squillman:您说的正是我的想法。我对此的看法是:如果您拥有别人所缺乏的技能,请用它来推销自己并取得成功(无论对您而言意味着什么)。帮助别人取得成功当然是令人钦佩的,但您不能拖着他们踢来踢去和尖叫。
Evan Anderson

@Evan:您认为教一个愿意学习的人与“推销自己并取得成功”矛盾吗?如果一位Windows管理员要寻求我的帮助(在脚本方面),我会犹豫不决,但最终团队合作是否就意味着付出更多努力来帮助他们?只是好奇地阅读您的想法。
osij2is

1
@ osij2is:我有罪过帮助“愿意学习的人”到过多的程度,以至于我肯定浪费了一些“机会”来花更多的时间,赚更多的钱,等等。我生活中的“任务”之一是推进使用计算机,最终使人们的生活变得更好。如果有人怀着强烈的学习欲望来找我,我会很乐意继续努力。话虽如此,如果需要“固定”的知识转让,我也可以做到。有时让我不能“教一个人要钓鱼”让我很难过,但是如果那正是这种情况所需要的……
埃文·安德森2009年

2

我的口头禅是“更聪明,更努力”。多次执行任何过程意味着通常可以通过单击鼠标,bash脚本或其他方法编写脚本以使其自动完成。从我的角度来看,这使我个人有更多的时间去做更重要的任务,而不仅仅是系统管理的“体力劳动”。

那些想避免编写脚本的人可能会想到很多事情。也许他们喜欢GUI界面,不想学习命令行或编程。也许他们认为,通过编写脚本来减少他们的自我重要性。无论哪种方式,这都不是我想要的那种员工,不愿做任何形式的脚本显示他们是什么样的员工。我宁愿有一个问题解决者,而不是“笨拙的”系统管理员。

至于鼓励和激励他们,我想说的就是照做,展示生产率的提高以及如何使他们的工作更轻松。对于某些人来说,成为Windows System Admin只是薪水,将很难激发他们超越过去十年为他们服务的点击式思维。


牢记“问题解决者”;我遇到的许多人都只是想要一本指导手册,告诉他们如何应对可能出现的每个问题。他们不想考虑正在发生的事情。只需执行步骤1至23,即可解决此问题。
icelava

我倾向于称这些人为“按钮推动者”,例如著名的未来蓝领工人乔治·杰森。
wfaulk

2

您已经提到了几个必须克服的问题,许多管理员不想参与编程,即使是像脚本这样低级的程序员也是如此。另一个与此有关,这是一个控制问题。当管理员手动执行任务时,他们确切地知道每个阶段正在发生什么。许多管理员可能会感到,通过用脚本替换该脚本,他们会失去对过程的控制,特别是如果他们不了解脚本并且不编写脚本(并且不想编写脚本)。

我认为与Unix管理员相比,Windows管理员更是一个问题,因为脚本在长期以来一直是Unix管理的重要组成部分,通常是Unix管理员从一开始就学到的东西,例如Windows管理及其固有的GUI-内在会导致更加手动的过程,脚本编写似乎是不自然的。

不幸的是,要让开发人员克服这一难题是艰辛的战斗。为了使管理员仍能控制自己,他们需要了解脚本的工作方式,因此确实需要了解和学习如何编写脚本,而要使他们执行此操作的唯一方法是真正了解脚本可以对他们做什么

很好地说这将使事情变得更快,使生活更轻松等,但是您能向他们证明吗?找到他们讨厌的任务,他们必须定期执行并尝试使其自动化。如果您可以执行此可怕的任务并使它成为单击脚本,则他们会爱上您,但更重要的是,他们可能会看到使用脚本的好处。


编写具有良好反馈的脚本,可能还包含一些较小的交互控制-用户友好的内容^^
Oskar Duveborn,2009年

1
我一意识到我可以从事一项特别可怕且漫长而令人讨厌的例行工作并将其自动化,便开始学习perl。不回头以来。
Twirrim

我的观点是,所有这些“可怕的任务”他们还是宁愿手动执行。:-)
icelava

解雇他们很多,并用一个超级脚本替换一个管理员。我会便宜一些
Nick Kavadias

2

[叹气]这在Windows世界中太普遍了,尽管我会质疑您关于大多数人不想花钱学习脚本的陈述。在我的系统管理员职业中,我做过的最伟大的事情是学习VB和Perl,这导致了VBS,而VBS导致了许多其他事情。

如果仅仅显示它们并不能起到激励作用,我喜欢使用的一个技巧是在管理人员面前抛出一些微妙的陈述:)如果可以的话,称其为糟透了,但事实并非如此。向决策者展示收益,通常会在整个集团中扩散。但是,不要混蛋。

更微妙的是,很难(即使不是不可能)改变某人。以身作则!


5
“你知道吗,我很确定我可以编写脚本,这样我们就不必花费持续的人力来执行它了。” 管理层面前的有力话:)
Twirrim

1
我一直相信,只有在Windows世界中,某人才能称自己(或她自己)为完全没有编程知识的管理员。您可能要发表的另一条评论是“您为什么要手动执行此操作?这就是我们要使用的计算机”。
John Gardeniers

不幸的是,由于我长期从事开发和咨询工作,因此我现在遇到的管理员主要是我的客户。我并不总是有机会让他们在管理层或IT领导面前看起来很糟糕:-)
icelava 2009年

1

这个问题是非常主观的。尽管我同意脚本提供的效率和增强的控制能力,但为什么必须将其作为命令?为什么您需要仅仅因为喜欢使用脚本而鼓励人们使用脚本?为什么不让人们选择使用他们喜欢和喜欢的工具?

这个问题还说明了IT界存在的一个普遍偏见:如果我不编写脚本,那么我一定不能像编写脚本的人那样聪明或好,这是错误的。我认识许多人,他们的脚本能比我做得更好,但是他们无法通过子网来挽救生命,也无法弄清如何运行网络跟踪,配置SQL Server以使用AWE或不知道启动方式。 INI文件是用于等等,等等。


2
应该鼓励使用脚本,因为它是一种公认​​的最佳实践(没有提及它是一项授权,也没有暗示)。老实说,我没有看到“你不那么聪明”的偏见,但我毫不怀疑它的存在。我会轻易地把那些人当傻瓜……
squillman

2
它是如何主观的?就像您说的那样,编写脚本可以提高效率。可以提高效率的业务管理工具或流程没有错。尝试鼓励他人发展能够使他们成为更好的系统管理员的技能的同事肯定没有错。
布赖恩

3
@squillman,他说这是一种最佳实践,本身并不是主观的。对我而言,最佳实践可能并不适合您。是否有一项研究表明90%的公司认为脚本是最佳实践。@Brian:谁说这使他们成为更好的系统管理员?我的同事可以编写脚本,但是不能子网划分,而我可以创建子网,但是却不能脚本划分,那么谁会更好呢?无意冒犯,只在这里扮演恶魔的拥护者。
joeqwerty

3
@Joeqwerty:与点击相比,脚本具有强大的功能,因为脚本(正确地)可以在更短的时间内,更准确地完成更多任务,这比我们卑鄙的人手动完成的任务更准确。也许这句话应该是:“脚本是一种更好的做法”。您(魔鬼的拥护者)论据比主张本身更具主观性。“对我来说,最佳实践可能并不适合您。” 可能是正确的,但这并不意味着这不是最佳实践。这可能意味着你不能不知道如何去做。这本身就是一个不同的问题。
osij2is

2
但是你的看法是错误的。;)严重的是,我认为避免编写脚本就像避免知道如何进行子网划分。谁都不是好人。我的意思是,如果您同意脚本可以提高效率和控制力,那么您为什么要争论那些应该避免使用脚本的人应该平等对待呢?如果您要雇用某人来耕田,您是宁愿雇一个拖拉机人还是一个牛人?
wfaulk

1

老实说,您可以将一匹马喝水,但不能让他喝水。

大约10年前,我在海军陆战队以SysAd的身份出现,在此之前,担任管理员和编码员之间存在很大差距。成为一名编码员通常意味着您无法与CO的宠物项目网站打交道(很少完成您的实际工作...)。

因此,我拒绝学习编码,但是一旦决定尝试,就会大吃一惊。

至于吸引某人,请尝试使用AD / LDAP脚本吸引他们。(我认为与处理WMI相比,它更容易访问。)分配任务进度,说“给我用户名和电子邮件地址”。 XYZ组中的人”。

我编写了这段代码,以查找不是指定组的成员的所有用户:https : //github.com/gwaldo/LDAP-Inverse-Group-Membership-Report

至于资源,请查看Microsoft脚本专家(他们有出色的文章和教程)和Scriptomatic2,我喜欢深入研究WMI。


0

下一个问题:他们为什么要编写脚本?那将决定答案。

据推测,您编写脚本是因为它效率更高。在这种情况下,您可以让其他任何人看到,或者向管理层指出,有更有效的方法来管理系统,并等待他们利用它来降低成本。

具有权限的人可以要求存在适当的脚本来处理大多数事情,从而可以强制执行脚本。这将如何运作取决于几件事。如果只是说这样,脚本可能仍然严重不足和过时,而管理员则正常工作。

还有一个问题,确切地说这如何影响您。这是否只会打扰您,或者如果您的管理员为脚本编写脚本,您的生活会更好吗?


主要的影响是管理员浪费时间在多台计算机上执行重复的手动琐事-较长的周转时间-这可能会影响我们的开发进度(永远不会足够)。
icelava

1
并且不要忘记手动任务容易出错。
John Gardeniers

0

我实际上还有一个想法。关于使用初级Windows管理员进行GUI交互的事实,如果您以脚本化GUI交互(例如AutoIt)启动脚本,也许会有所帮助。这样一来,他们就可以在编写脚本方面一臂之力,同时仍可以使用他们已经知道的工具,而不必扔掉现有的工具,让他们同时学习新的工具和脚本。

然后,一旦他们对脚本的总体想法感到满意,他们就可以继续使用非GUI脚本。即使没有,自动单击按钮仍然可以节省大量时间。


0

我已将脚本定义为“为您工作的文档”。

经理:花了无数时间来创建一年级学生可以理解的文档,这些文档到本周末将过时,供您的同事在Task-X中单击。

员工:我有一个执行Task-X的脚本,请给他们。

经理:当然,在您完成了我刚才要求的文档之后,请同时用流程图记录您的脚本。


0

我已将脚本定义为“为您工作的文档”。

经理:花了无数时间来创建一年级学生可以理解的文档,这些文档到本周末将过时,供您的同事在Task-X中单击。

员工:我有一个执行Task-X的脚本,请给他们。

经理:当然,在您完成了我刚才要求的文档之后,请同时用流程图记录您的脚本。

不要忘记文档应该在MS Word文档中,以免从服务器读取文件变得复杂。


我忘了那个要求。
内森·哈特利
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.