在我的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会导入到我的个人资料中。
答案 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 []