设计PowerShell任务型指令的方法

日期: 2010-12-12 作者:Brandon Shell翻译:Mark 来源:TechTarget中国 英文

很多年前,关于如何设计Windows PowerShell的函数/指令,我和同事进行过讨论。作为一名专业的开发人员,他更支持拥有少量通过多种方法输出对象的指令。我当然了解,对开发人员而言,这种方法所拥有的好处。   但是对IT管理员来说,这实在是让人感到厌烦。

管理员对调用命令输出上的类函数一定很陌生。我们通常习惯于运行一条指令并获取我们想要的数据。我倾向于的想法是拥有一些任务型指令,它们执行简单操作并为该任务提供相关反馈。运用这个方法对命令行大有益处,也让管道成为一个很有力的工具。

  因此,我想要举个在设计PowerShell命令时运用任务型指令代替类函数的例子。虽然很多供应商(随便说两个出……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

很多年前,关于如何设计Windows PowerShell的函数/指令,我和同事进行过讨论。作为一名专业的开发人员,他更支持拥有少量通过多种方法输出对象的指令。我当然了解,对开发人员而言,这种方法所拥有的好处。

  但是对IT管理员来说,这实在是让人感到厌烦。管理员对调用命令输出上的类函数一定很陌生。我们通常习惯于运行一条指令并获取我们想要的数据。我倾向于的想法是拥有一些任务型指令,它们执行简单操作并为该任务提供相关反馈。运用这个方法对命令行大有益处,也让管道成为一个很有力的工具。

  因此,我想要举个在设计PowerShell命令时运用任务型指令代替类函数的例子。虽然很多供应商(随便说两个出名的,Citri和IBM)在创建PowerShell指令方面做得很好,特别是VMware团队,我觉得他们在这个专有领域里做得很棒。

  以下是根本目标:

Get-Something | Filter | Change-Something | Save-Something

  从根本上说,我不想依赖对象的类函数来执行我的任务:

Get-Something | %{$_.DoSomething()} | %{$_.save()}

  再说具体点,我们可以说我们拥有一个Car Object类别。这个类别具有的属性包括构造、模式、颜色、疲劳计数、大小和类型。它也有它能做的事情,如启动、关闭、停止、转变、负载和上载。

  用这个开发方法,我们可以通过用这套属性和类函数创建一个Car类别来完成目标。这看上去似乎很简单,但对于一般管理员来说,它不是直观的,他们并不想做以下事情:

Get-Car | ?{$_.Type -eq "MiniVan"} | %{$_.LoadPeople()}| %{$_.Start()}| %{$_.Turn("Right")} | %{$_.Stop()}| %{$_.UnLoadPeople()}

  从Windows管理员的角度来看,一堆任务型指令都可以是你的最佳选择。现在让我们假设是以类函数来代替,你会得到以下指令:

Get-Car
New-Car
Remove-Car
Start-Car
Stop-Car
Invoke-TurnCar
Invoke-LoadCar
Invoke-UnLoadCar
Set-Car

  下面你可以这么做:

Get-Car -Type "MiniVan" | Invoke-LoadCar | Start-Car | Invoke-TurnCar -Right | Stop-Car | Invoke-UnloadCar

  它有多简单呢?就像你能看到的,它读起来更像句子而不像脚本语言。

  我明白PowerShell功能强大且包括有类函数的对象,它似乎喜欢更多的工作来为每个任务提供自己的指令。我认为这是值得的。不管你是管理员还是开发者,当你为其它消耗扩展你的PowerShell技能组并编写代码时,记得花时间来让它尽可能直观。

相关推荐