Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 脚本环境影响父shell_Powershell - Fatal编程技术网

Powershell 脚本环境影响父shell

Powershell 脚本环境影响父shell,powershell,Powershell,修改PowerShell脚本中的某些方面似乎会修改正在运行的shell。如果我为脚本提供源代码,而不是运行脚本,则会出现这种情况 script.ps1 [cultureinfo]::currentculture=[cultureinfo]::不变量文化 设置PSDebug-跟踪1 所以很明显,调试跟踪是活动的,并且文化变化是持久的…来自for[cultureinfo]::currentculture](重点添加): 获取或设置表示当前线程使用的区域性的CultureInfo对象 也就是说,按设

修改PowerShell脚本中的某些方面似乎会修改正在运行的shell。如果我为脚本提供源代码,而不是运行脚本,则会出现这种情况

script.ps1

[cultureinfo]::currentculture=[cultureinfo]::不变量文化
设置PSDebug-跟踪1
所以很明显,调试跟踪是活动的,并且文化变化是持久的…

来自for
[cultureinfo]::currentculture]
(重点添加):

获取或设置表示当前线程使用的区域性的CultureInfo对象

也就是说,按设计进行的更改对整个线程生效,而不仅仅是对脚本生效,并且在整个线程的生命周期内(在脚本退出后)或直到您再次更改它为止

因此,如果要确定区域性更改的范围,必须手动执行以下操作:

  • 事先保存以前的当前区域性
  • 之后恢复这种文化
警告

  • 在Windows PowerShell中,区域性自动重置为启动值,但仅在每次调用命令或脚本后在命令提示下重置-有关背景信息和解决方法,请参阅;相反,如果一个脚本调用另一个脚本,并且被调用方更改了当前区域性,则该更改对调用脚本仍然有效

  • 相比之下,PowerShell Core的行为一致,并且从不自动重置当前区域性


请注意,该行为类似于使用
Set Location
cd
)更改当前位置(目录),这也会影响整个线程,就像在
cmd.exe
批处理文件中一样(除非您使用
setlocal
),但在Bash脚本中则不会


在PowerShell中,脚本文件(
*.ps1
)在进程中运行,
cmd.exe
中的批处理文件(
*.cmd
*.bat
),而类似于POSIX的shell(如Bash)在子进程中运行脚本,这会隐式地、不变地将环境更改范围限定为此类脚本。

关于最后一段,看见
> [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)