Windows PowerShell:看上去就像一个工作流

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

Don Jones

工作流了很多像 Windows PowerShell 函数或脚本的外观和感觉 — 但是他们不是。 这相似只是表面现象,和它或许不会穿过皮肤甚至延长。

你要始终记住 Windows PowerShell 必须将工作流化为一种完全独立的技术 — Windows 工作流基础 (WF)。 这意味着你可以只做可以在 WF 中重复的事情。 然后,代码将运行在一种全然不同的环境中具有其自己的规则和限制。

作为一个工作流运行任何脚本

运行工作流的最简单方法是,只是作为一个工作流运行任何标准的 Windows PowerShell 脚本。 可以使用调用 AsWorkflow 命令来执行此操作。 虽然 Windows PowerShell 版本 3 应该是能够发现并不需要显式地第一次加载模块情况下运行的命令,此命令在 PSWorkflow 模块中,生活。 此命令在 InlineScript 块,意味着它内 WF 作为单步运行中基本上环绕你整个脚本。

这意味着您不必担心 Windows PowerShell 工作流的限制。 不过,你也不能利用某些 Windows PowerShell 工作流功能,像恢复被中断的进程的能力。 在这种情况下,您的"进程",将包括在单个步骤中运行整个脚本。 是没有可能的要通过中途恢复,如果你要暂停或中断。 这里是一个示例,其中我用几个命令创建一个脚本块,然后将它们作为一个工作流运行:

$script = { $name = Get-Content Env:\COMPUTERNAME $name | Out-File c:\MyName.txt Get-Service } Invoke-AsWorkflow -Expression $script -PSComputerName DC,CLIENT

我在这里使用一个变量的原因之一是显示 WF 作为单一的 InlineScript 运行所有这一切。 请记住,每个命令 WF 运行获取其自己的新鲜的环境。 没有内置的方法,以保持两个命令之间的数据。 这意味着变量本身相当无用。 但是,因为这整件事隐式包装为单步执行 InlineScript,我创建的变量将在整个依然存在。

将你何必呢? Windows PowerShell 工作流仍为您提供了几个额外优势。 有一定数量的共享的所有工作流的参数。 这些服务允许您指定目标计算机名称的东西等等。 您的脚本将继承多机工作基本的基础结构。 对于长时间运行的脚本,您可以启动工作流,然后从远程计算机断开连接,而工作流继续运行,这真是太好。

正式工作流语法

这里是一个非常简单的工作流:

Workflow New-Server { Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical } New-Server -PSComputerName CLIENT,DC

工作流是一种 Windows PowerShell 命令,像一个 cmdlet、 脚本或函数。 这种情况下,您可以运行他们只需通过调用它们的名称,所做的关于此示例中的最后一行。 请记住,所有的工作流继承一定数量的内置参数,如 –PSComputerName。 工作流还依赖于 Windows PowerShell 远程处理功能,在此示例中的两台计算机上启用的。

实际结果是,在工作流中的这两个命令正在运行右在远程计算机上,回到我的电脑的结果。 我没有的任何的代码或甚至创建计算机名称参数。 我没有要枚举的计算机名称,创建连接或别的什么。 Windows PowerShell 工作流对它为我所有。 绝对没有在此脚本中我不能没有 Windows PowerShell 工作流实现 — 它只需要多一点点我的一部分工作。

你会发现我已经在我的工作流中阐明的命令名称。 我还在每个实例使用命名的参数。 总是在任何 Windows PowerShell 脚本中的最佳做法,但它是强制性的工作流。 您不能使用位置参数。 你必须清楚说明一切,否则你会出错。

现在签出此工作流 (不是您需要导入您在"工作流"关键字是法律秩序的壳实例的 PSWorkflow 会议):

Workflow New-Server { $name = Get-Content -Path Env:\COMPUTERNAME Get-Content -Path Env:\COMPUTERNAME | Out-File -FilePath C:\MyName.txt Get-NetAdapter -Physical $name | Out-File -FilePath C:\MyOtherName.txt } New-Server -PSComputerName CLIENT,DC

当我第一次写此示例中,我想,"MyOtherName.txt 将为空"。请记住,作为单独的命令,它们之间没有共享上下文运行的每个工作流的内容。 当我运行此示例时,但它工作。 计算机名称的确是写给 MyName.txt 和 MyOtherName.txt。 谁给?

Windows PowerShell 实际上许多罩下的东西,以尝试并确保您得到您期望的结果从工作流。 例如,一个"正常的"工作流命令是用写的非常具体的方式。 WF 不能以本机方式运行只是任何旧的 Windows PowerShell cmdlet。 Windows PowerShell 团队提供 WF 等效一大堆的本机 cmdlet,所以,通常是 cmdlet 和 WF 活动之间的一对一映射。

当您使用 cmdlet,没有相应的活动时,Windows PowerShell 隐式环绕您 WF InlineScript 活动范围内的代码。 这已使运行 Windows PowerShell、 执行您在 Windows PowerShell 命令,然后考虑结果回 WF WF 的效果。 所以很多东西,"不应该"工作会工作,因为 Windows PowerShell hacks 它一起为你。

这里的危险是疑难解答可以成为极其困难,因为你不会总是能够看到 Windows PowerShell 引擎盖下做什么。 在此示例中,Windows PowerShell 确保顶级变量保存整个工作流。

我们打算下一步

信不信由您,你已经有足够开始写作基本工作流。 您可以让这些目标在您安装 Windows PowerShell 版本 3 和启用远程处理的任何计算机。 启用远程处理是理由的它创建一个 Windows PowerShell 工作流使用的会话配置。 如果上启用了远程处理计算机与 Windows PowerShell 版本 2,然后再安装版本 3,要重新运行启用 PSRemoting 来创建必要的配置。

保持您的工作流相当简单。 运行的命令序列和不要做大量的花式动作。 您不应该有任何问题,你就会利用内置的 Windows PowerShell 工作流远程、 多机靶向和其他功能。

下个月,我就会开始获取复杂得多。 我看看深工作流和正常的 Windows PowerShell 脚本之间的差异,然后开始探索一些更有趣的 Windows PowerShell 工作流功能。

Don Jones

Don JonesWindows PowerShell MVP 奖得主、 TechNet 杂志 》 的特约编辑。 他合著了有关 Windows PowerShell 版本 3,包括在 Windows PowerShell 和 Windows PowerShell 远程处理中创建 HTML 报表上的几个免费标题的四本书。 找到它们都在 PowerShellBooks.com,或问琼斯你在 PowerShell.org 的讨论论坛。

相关的内容