在PowerShell脚本中禁用严格模式

时间:2013-02-26 17:32:12

标签: powershell

在我的PowerShell个人资料中,我有Set-StrictMode -Version 2.0。不幸的是,我有一些脚本(和模块)在启用严格模式的情况下无法正常工作。

我试图通过将Set-StrictMode -Off置于脚本的顶部或使用行为不当模块的脚本顶部来解决此问题。不幸的是,它似乎没有任何效果。

如何在PowerShell中暂时禁用严格模式?

更多细节:这特别适用于PsGet。见issue 57。我的个人资料中有Set-StrictMode -Version 2.0。如果我尝试从脚本中使用PsGet的Install-Module,我会收到错误,说“在此对象上找不到属性'动词'。”

即使我将Set-StrictMode -Off放在脚本的顶部,也会发生这种情况。如果我在运行脚本之前在命令行运行Set-StrictMode -Off,我没有错误,脚本运行正常。

在开启严格模式之前,PsGet会导入到我的个人资料中。

1 个答案:

答案 0 :(得分:1)

就像马特在评论中所说,我没有看到这个问题重现。你能提供更多细节吗?

StrictModeTest.ps1的内容:

Set-StrictMode -Off

# variable $x doesn't exist, should trigger strictmode error
"Value is [$($x.Path)]"

测试(PSv3):

PS C:\> Set-StrictMode -Version 2.0
PS C:\> .\StrictModeTest.ps1
Value is []

如果我注释掉Set-StrictMode -Off行,我会收到预期的错误:

PS C:\> .\StrictModeTest.ps1
The variable '$x' cannot be retrieved because it has not been set.
At C:\StrictModeTest.ps1:4 char:14
+ "Value is [$($x.Path)]"
+              ~~
    + CategoryInfo          : InvalidOperation: (x:String) [], RuntimeException
    + FullyQualifiedErrorId : VariableIsUndefined

Value is []