我正在尝试使用函数设置一些变量的值。我的代码如下:
$BackupFile = $null
$TaskSequenceID = $null
$OSDComputerName = $null
$capturedWimPath = $null
Function Set-OsToBuild
{
switch ($OsToBuild)
{
"Win7x64"
{
$BackupFile = "Win7x64-SP1.wim"
$TaskSequenceID = "WIN7X64BC"
$OSDComputerName = "Ref-Win7x64"
$capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
问题在于,$BackupFile、$TaskSequenceID、$OSDComputerName和$capturedWimPath的这些值在此函数之外为空白/null。
正确的方法是什么呢?我想在这个函数中设置这些值,然后在父作用域的脚本中使用这些值。
3条答案
按热度按时间dxpyg8gm1#
这些变量是在函数的
local
-作用域中创建的,当函数结束时,这些变量会被删除。来源:about_Scopes
如果需要变量可用于脚本,则将它们写入
script
作用域。如果你想保留整个会话的值(直到你关闭powershell-process),那么你应该使用
global
作用域。1qczuiv02#
powershell
about_scope
help document就是您要阅读的内容。特别是本节:
Windows PowerShell作用域
因此,根据您的确切需要,您可以使用以下任何一种,我相信。
$global:BackupFile = "Win7x64-SP1.wim"
$script:BackupFile = "Win7x64-SP1.wim"
$1:BackupFile = "Win7x64-SP1.wim"
v64noz0r3#
为了在外部设置
$BackupFile
,您的函数应该写入$script:$BackupFile
。但是有一个陷阱!如果你的脚本是从另一个脚本调用的(使用
&
,点源时不会发生),那么$BackupFile
将从调用者继承,但$script:$BackupFile
将为空。所以你应该从$BackupFile
读取,但写入$script:$BackupFile
。也要注意像$script:BackupFile += ".bin"
这样的语法,因为它从不正确的变量读取。避免陷阱的一个可能的解决方法是以
$script:BackupFile = $BackupFile
开始函数。