Windows PowerShell:PowerShell 脚本与 PowerShell 工作流

每个月这一年,Don Jones 将在 12 个部分的教程中安装 Windows PowerShell 工作流。 我们鼓励您通过一系列按顺序,读开头 2013 年 1 月列。

Don Jones

工作流的外观和感觉很像 Windows PowerShell 函数或脚本,但他们不是。 其相似之处只是表面现象,和它可能甚至无法穿过皮肤。

你要记住 Windows PowerShell 已将工作流化为一种完全独立的技术 — Windows 工作流基础 (WF)。 这意味着你可以只做你可以白表中存在重复的事情。 您的代码将运行在一种全然不同的环境,都有其自己的规则和限制。 事实上,工作流和一个"正常"的脚本之间的差异可以很大。

而不是多一个运行空间

在一个正常的脚本,在脚本中的一切在单一的运行空间,与单个作用域层次结构中运行。 运行空间是大致相当于一个 Windows PowerShell 的过程。 如果您认为 Windows PowerShell 控制台窗口的这是单一的运行空间。 这意味着一切都是相同的一致和持续的运行空间内。

变量、 命令、 驱动器和其他一切一切开始的一种方式。 他们保持相同,除非您更改它们。 所内的运行空间,做任何更改"粘"在这一过程的持续时间。

在工作流中,每一项活动 — 每个命令、 内联脚本块等等 — 可以有它自己的运行空间。 这意味着如果你在一个进行了更改,它可能不会显示在任何其他国家。 在您的工作流的一部分中设置一个变量可能不执行任何更改的工作流,而另一部分除非你采取特别的措施,否则确保。

正如你看到的在上个月的文章,如果你定义一个变量在工作流的最高级别,它存在整个工作流 (系统采取步骤,以确保这是真的)。 如果工作流中的命令创建一个变量,该变量不会提供给工作流的其余部分。

这意味着模块使用也是不同的。 导入一个模块在一个点不会必然使命令可用在以后的时间点。 您需要更多的照顾,因为单个工作流基本上可以跨越多个独立作用域。

句法差异

有一些语法差异内一个工作流,其中一些我已经在以前的文章中这一系列中指出:

  • 您不能使用位置参数。 你必须拼出的每个命令参数。 如果你以前运行 Dir C:\Windows,您需要了解如果 –Path C:\Windows 相反。 您仍然可以使用别名 (如 Dir) 或截断参数名 (例如,–Comput,–ComputerName)。
  • 工作流可以有参数,但是他们只可以包括在其名称中的字母、 数字、 下划线和连字符。 这是不同于普通的 Windows PowerShell 脚本规则。
  • 您不能将一个模块导入工作流会话。 事实上,命令真的不能更改当前会话和对后续的命令有任何影响。 如果工作流需要使用一个模块,你需要使用 –PSRequiredModules 活动参数。
  • InlineScript 活动和工作流活动实现的命令,你得到额外的命令参数,包括前面提到的 –PSRequiredModules 参数的一群。
  • 除非你在一个内联脚本块内这样做,您不能在工作流中,运行对象的方法。 该对象必须在方法工作秩序中的内联脚本块内生产。
  • 你不能点源的脚本。
  • 您不能使用"&"调用操作符。
  • 交换机构造必须包括的 –CaseSensitive 参数。 工作流相当于交换机构造是以本机方式区分大小写。 Switch 语句必须使用常量。 您不能使用比较运算符、 表达式、 文件引用或脚本块。 基本上,尽量避免交换机构造。
  • 不允许中断和继续发言。
  • 只有 PSDrives 添加由 Windows PowerShell 核心提供商 — 文件系统、 注册表、 证书存储区、 环境、 函数、 变量和 WS 管理 — 是有效的。 若要使用由一个模块创建的 PSDrive,–PSRequiredModules 参数运行活动和指定的模块名称。

是的是很大的区别。 如果你是一个认真的 Windows PowerShell 程序员,你会遇到更少的这些机构,例如命名您的参数。 你仍会遇到你忘了直到你成为真正熟悉写作工作流的差异。

奖金

Windows PowerShell 工作流并不是所有的坏消息差异 — 事实上,它给你一吨的功能免费。每个工作流收益内置参数,包括:

  • –AsJob 作为后台作业运行的工作流。 你可以给它通过使用 –JobName 的作业名称。
  • –PSComputerName 上的指定的计算机或计算机,使用 Windows PowerShell 远程处理运行工作流。
  • –PSCredential 和各种相关参数让您指定备用身份验证的详细信息。
  • –PSPort 和其他与连接相关的参数允许您指定工作流的远程处理组件的备用连接详细信息。

注意到这些参数数目以 –PS 开头吗? 那被称为一个命名空间。 你应避免创建您自己也开始与 –PS 的参数。 如果 Windows PowerShell 的未来版本中添加新的参数,他们很可能就会开始 –PS。 如果您通常避免那你就会避免碰撞与您自己的参数名称的前缀。

更糟糕的是,不更好,但不同

这里的实际结果是工作流不是 Windows PowerShell 脚本。 他们是不同的。 他们有一些差别,可以让你的生活更容易。 一些其他的差异可以要求从你的工作多一些。 了解差异可以帮助您更快速地开始编写有效的工作流。

Don Jones

Don Jones 是 Windows PowerShell 最有价值球员奖收件人和特约编辑 TechNet 杂志 》*.*他合著了四本关于 Windows PowerShell 版本 3,其中包括免费的 Windows PowerShell 远程处理上的与在 Windows PowerShell 中创建 HTML 报告书。找到他们都是在 PowerShellBooks.com,或问琼斯在讨论论坛上 PowerShell.org

相关的内容