修改 PowerShell 脚本中的某些方面似乎会修改正在运行的 shell。如果我提供脚本而不是运行它,这将是意料之中的。
脚本.ps1
[cultureinfo]::currentculture = [cultureinfo]::InvariantCulture
Set-PSDebug -Trace 1
Run Code Online (Sandbox Code Playgroud)
> [cultureinfo]::currentculture
LCID Name DisplayName
---- ---- -----------
1031 de-DE Deutsch (Deutschland)
> .\script.ps1
> [cultureinfo]::currentculture
DEBUG: 1+ >>>> [cultureinfo]::currentculture
LCID Name DisplayName
---- ---- -----------
127 Unveränderliche Sprache (Unveränderliches Land bzw. unveränderliche Region)
Run Code Online (Sandbox Code Playgroud)
很明显,调试跟踪是活跃的,并且文化变化持续存在......
从该文档的[cultureinfo]::currentculture](强调):
获取或设置表示当前线程使用的区域性的 CultureInfo 对象。
也就是说,设计更改对整个线程生效,而不仅仅是您的脚本,并且它会在线程的整个生命周期内(在您的脚本退出后)或直到您再次更改它为止。
因此,如果您希望将您的文化更改限定在范围内,您必须手动:
警告:
在Windows PowerShell 中,区域性会自动重置为启动值,但仅在命令提示符下,在每次调用命令或脚本后 - 请参阅此答案以了解背景信息和解决方法;相比之下,如果一个脚本调用另一个脚本并且被调用者更改了当前区域性,则该更改对调用脚本保持有效。
相比之下,PowerShell Core 的行为始终如一,永远不会自动重置当前区域性。
请注意,该行为类似于使用Set-Location( cd) 更改当前位置(目录),这也会影响整个线程,就像它在cmd.exe批处理文件中所做的那样(除非您使用setlocal) - 但不是在 Bash 脚本中,例如。
在 PowerShell 中,脚本文件 ( *.ps1)在进程内运行,批处理文件 ( *.cmd, *.bat) 在 中运行cmd.exe,而类似 POSIX 的外壳程序(例如 Bash)在子进程中运行脚本,它隐式且总是将环境更改范围限定为此类脚本。
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |