PowerShell中未设为全局的变量为何能被外部脚本访问?
PowerShell脚本调用中的作用域问题
- 先明确:
&是PowerShell的调用操作符,作用是在当前作用域的子作用域中执行指定脚本/命令,并非导入脚本(导入脚本用.点源操作符)。 - 你遇到的现象核心是PowerShell的作用域规则:子作用域默认可以读取父作用域中的变量,除非父作用域的变量被标记为
$private:私有变量,或者通过其他方式创建了完全隔离的作用域(比如自定义运行空间)。 - 用你的示例验证:
脚本1内容:
脚本2内容:$test = "This is a test" & ".\script2.ps1"
脚本2运行在脚本1的子作用域中,因此能读取父作用域的Write-Host $test$test变量。 - 如果想让脚本2无法访问该变量,有两种常见方式:
- 在脚本1中将变量设为私有:
$private:test = "This is a test",子作用域就无法读取该变量。 - 用
Start-Process启动新的PowerShell进程执行脚本2,新进程的作用域完全独立,看不到父进程的变量。
- 在脚本1中将变量设为私有:
内容的提问来源于stack exchange,提问作者jkc
相关产品推荐
相关产品推荐

