5

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

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

谢谢。

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

我认为这样做的方法是使用它,这是一个 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 还没有发布日期。

感谢帮助。鲍勃。

4

4 回答 4

4

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

于 2009-04-16T13:12:55.863 回答
1

那么,您是在要求功能正确性还是语法正确性?

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

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

于 2009-04-16T13:07:15.487 回答
0

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

于 2009-04-16T13:51:28.610 回答
0

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

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

您给出的描述听起来像是您想要的不仅仅是语法/“它将运行”类型检查。就像@JoHannes Rossell 所说,这不是微不足道的,而且对你正在做的事情非常具体。

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

詹姆士

于 2009-04-16T16:35:51.450 回答