【问题标题】:Testing Powershell scripts for correctness测试 Powershell 脚本的正确性
【发布时间】:2010-10-19 20:28:40
【问题描述】:

他们无论如何都可以在不执行powershell脚本的情况下测试它的正确性。我知道你可以在 unix 中做类似的事情,但找不到 powershell 的等价物。

基本上我拥有的是一个脚本存储库,其中每个脚本都与规则相关联。如果触发规则,则脚本将执行,但我需要确保脚本有效,然后再将其放入存储库。

谢谢。

嗨, 好吧,不幸的是 -whatif 命令还不够。它是我想从 C# 运行时引擎检查的脚本的语法,如果引擎规则触发,它会触发脚本。在脚本触发之前,我将规则中的 IList 值写入其中,然后触发它。但是我需要确保它在语法上是正确的,否则我将不得不依靠规则编写器来确保它们是正确的,这是我做不到的,因为很多人会编写规则,只有一个 duff 脚本会带来发动机停机。我不能这样做,因为引擎是为 6 sigma 正常运行时间而设计的企业级产品。

我认为这样做的方法是使用这个,这是一个 v2 库。

http://msdn.microsoft.com/en-us/library/system.management.automation.parseexception(VS.85).aspx

我认为有一种方法可以创建一个 ScriptBlock 并在其周围放置一个 try catch 以捕获 ParseException。有人可以告诉我该怎么做。这正在成为一个真正的挑战。

谢谢。

嘿, 好吧,我与 MS 中的一个人(他是 sharepoint pm)进行了交谈,他与其中一个 powershell 人员交谈,他告诉我在 powershell v1 中没有真正的方法可以在不执行的情况下检查脚本的语法。所以我猜 -whatif 标志是最接近的,但不幸的是它不是静态检查器。好消息是,在 v2 中,有一种方法可以通过 Automation.PsParser 类 Tokenize 成员对输入流进行标记。这将根据 PS 语法对脚本进行标记,因此如果它出错,它就是一个垃圾脚本。问题是 v2 还没有发布日期。

感谢您的帮助。 鲍勃。

【问题讨论】:

标签: c# powershell scripting syntax-checking


【解决方案1】:

我认为您需要量化“有效”对您意味着什么。这是一个模棱两可的术语,可能意味着很多事情。

如果您的意思是 perl 的语法检查,那么 PowerShell V1 中的 PowerShell 脚本没有完全等价的东西。我也不确定 V2 中是否有任何内容。

您给出的描述听起来像是您想要的不仅仅是语法/“它将运行”类型检查。就像@JoHannes Rossell 所说的那样,这并非微不足道,而且与您正在做的事情高度相关。

前面提到的其他答案中的“whatif/confirm”方法仅适用于 PowerShell cmdlet,不适用于脚本。它们显示了该 cmdlet 会做什么,而不是语法检查。

詹姆斯

【讨论】:

    【解决方案2】:

    许多 PowerShell 命令提供 -whatif 参数。

    【讨论】:

    • Powershell cmdlet(请注意术语有所不同),但是 OP 询问脚本
    • 好吧,因为大多数脚本都包含 PowerShell 命令 (cmdlet)...没有什么可以阻止脚本采用 -whatif 参数,您只需自己提供逻辑即可。
    【解决方案3】:

    你想要的是 prolly whatif / confirm。它直接来自 Unix 世界。

    【讨论】:

    • 嗨,Majkinetor,这是它,而且真的很快。我已经断断续续地寻找了大约一年。谢谢。鲍勃。
    • 嗨 Majkinetor,尽管我希望是这样,但似乎这个参数只适用于某些命令,而不是脚本本身。由于我是从 c# 调用它,所以它不合适。
    • 正如我在回答中所指出的,“whatif”和“confirm”仅适用于 cmdlet,不适用于整个脚本。
    • 甚至没有。如果您检查 cmdlet SDK,您可以看到 cmdlet 可能会选择实施或不实施。您也可以设计具有此功能的脚本。
    • @null:我猜你说的是沙盒。如果你想在 powershell 脚本级别上使用它......好吧......我想永远不会有这样的功能。如果您需要沙箱,您可以为此使用/自动化一些外部工具并解析它们的输出。谷歌沙盒
    【解决方案4】:

    那么,您是要求功能正确还是句法正确?

    从功能上讲,您需要创建一个测试用例和环境来进行测试。

    从语法上讲,您正在寻找用于 powershell 的静态代码检查器。

    【讨论】:

    • 准确地说:测试永远不能保证正确性,只能保证存在错误。但是程序行为的正式证明并非易事:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2020-09-29
    • 2020-10-13
    • 2019-04-23
    • 2021-04-29
    相关资源
    最近更新 更多