在powershell中为所有模块设置严格模式

Ser*_*kov 6 powershell

目前我在我的脚本中使用以下结构:

HighLevel.ps1
  LowLevelModule1.psm1
  LowLevelModule2.psm1
  ...
Run Code Online (Sandbox Code Playgroud)

现在,我在ps1文件中设置严格模式,以便在运行时至少获得一些类型安全性.不幸的是,cllaing Set-StrictMode -Version Latest只能为当前作用域和所有子作用域启用严格模式(这是设计使然.证明:https://technet.microsoft.com/en-us/library/hh849692.aspx).

据我了解当前的PS架构,在ps1文件中更改严格模式会更改脚本级别配置.但模块有自己的脚本范围,因此模块不会继承父级规则.

作为一种解决方法,我可以放到Set-StrictMode每个PSM1文件,但它似乎不是最好的方法,因为我无法给我的模块的客户端决定,打开严格模式或不.

$VerbosePreferences配置存在同样的问题.每个范围也启用此配置,因此我必须跨模块边界传播此信息.

有关如何全局更改严格模式和详细偏好的任何建议吗?

PS为此目的更改$ profile不是一个选项.

bri*_*ist 4

如果这些是您自己编写的模块,那么我建议您在模块内设置您想要的严格模式。它仅适用于模块内部的代码,因此由调用者设置的模块外部代码的设置是无关的。

如果这些是其他人编写的模块,那么您不想更改该代码的严格模式(或缺乏严格模式),因为它没有在严格模式下进行测试,并且可能会因此而中断。

  • 是的,我认为你不会回避范围问题。如果您可以编辑 .psm1 文件,则可以在那里设置“$VerbosePreference”,或[使用“$PSDefaultParameterValues”](https://technet.microsoft.com/en-us/library/hh847819.aspx)进行设置。 (2认同)