gpt4 book ai didi

powershell - 脚本环境影响父 shell

转载 作者:行者123 更新时间:2023-12-03 12:23:21 24 4
gpt4 key购买 nike

修改 PowerShell 脚本中的某些方面似乎会修改正在运行的 shell。如果我获取脚本而不是运行它,这是意料之中的。

脚本.ps1

[cultureinfo]::currentculture = [cultureinfo]::InvariantCulture
Set-PSDebug -Trace 1
> [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)

很明显,调试跟踪是活跃的,文化变革持续存在......

最佳答案

来自 the docs对于 [cultureinfo]::currentculture](添加了重点):

Gets or sets the CultureInfo object that represents the culture used by the current thread.

也就是说,设计上的更改对整个线程都有效,而不仅仅是您的脚本,并且它会在线程的整个生命周期(脚本退出后)持续存在,或者直到您再次更改它。

因此,如果您希望您的文化改变在范围内,您必须手动:

  • 预先保存以前的当前文化
  • 事后恢复该文化。

警告:

  • Windows PowerShell 中,区域性会自动重置为启动值,但只有在命令提示符处,每次之后命令或脚本的调用 - 参见 this answer获取背景信息和解决方法;相比之下,如果一个脚本调用另一个脚本并且被调用方更改了当前区域性,则该更改对调用脚本仍然有效。

  • 相比之下,PowerShell Core 的行为始终如一,从不自动重置当前区域性。


请注意,该行为类似于使用Set-Location (cd) 更改当前位置(目录),这也会影响整个线程,因为它确实在 cmd.exe 批处理文件中(除非您使用 setlocal)- 但 在 Bash 脚本中,例如。

在 PowerShell 中,脚本文件 (*.ps1) 在进程中 运行,批处理文件 (*.cmd , *.bat) 在 cmd.exe 中,而类似 POSIX 的 shell(例如 Bash)在 子进程 中运行脚本,它隐式且始终将环境更改范围限定在此类脚本中。

关于powershell - 脚本环境影响父 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56922383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com