我正在尝试使用函数设置某些变量的值。我的代码如下:
$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。
这样做的正确方法是什么?我想在这个函数中设置这些值,并在稍后的脚本中,在父作用域中提供这些值。
答案 0 :(得分:11)
变量在函数的local
范围内创建。完成这些功能后,这些变量将被删除。
Global: The scope that is in effect when Windows PowerShell starts. Variables and functions that are present when Windows PowerShell starts have been created in the global scope. This includes automatic variables and preference variables. This also includes the variables, aliases, and functions that are in your Windows PowerShell profiles. Local: The current scope. The local scope can be the global scope or any other scope. Script: The scope that is created while a script file runs. Only the commands in the script run in the script scope. To the commands in a script, the script scope is the local scope.
来源:about_Scopes
如果您需要为脚本提供变量,请将它们写入script
范围。
$BackupFile = $null
$TaskSequenceID = $null
$OSDComputerName = $null
$capturedWimPath = $null
Function Set-OsToBuild
{
switch ($OsToBuild)
{
"Win7x64"
{
$script:BackupFile = "Win7x64-SP1.wim"
$script:TaskSequenceID = "WIN7X64BC"
$script:OSDComputerName = "Ref-Win7x64"
$script:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
如果您想保留整个会话的值(直到关闭powershell流程),那么您应该使用global
范围。
$global:BackupFile = $null
$global:TaskSequenceID = $null
$global:OSDComputerName = $null
$global:capturedWimPath = $null
Function Set-OsToBuild
{
switch ($OsToBuild)
{
"Win7x64"
{
$global:BackupFile = "Win7x64-SP1.wim"
$global:TaskSequenceID = "WIN7X64BC"
$global:OSDComputerName = "Ref-Win7x64"
$global:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
}
}
}
答案 1 :(得分:4)
powershell about_scope
help document就是您想要阅读的内容。
特别是本节:
Windows PowerShell范围
Scopes in Windows PowerShell have both names and numbers. The named scopes specify an absolute scope. The numbers are relative and reflect the relationship between scopes. Global: The scope that is in effect when Windows PowerShell starts. Variables and functions that are present when Windows PowerShell starts have been created in the global scope. This includes automatic variables and preference variables. This also includes the variables, aliases, and functions that are in your Windows PowerShell profiles. Local: The current scope. The local scope can be the global scope or any other scope. Script: The scope that is created while a script file runs. Only the commands in the script run in the script scope. To the commands in a script, the script scope is the local scope. Private: Items in private scope cannot be seen outside of the current scope. You can use private scope to create a private version of an item with the same name in another scope. Numbered Scopes: You can refer to scopes by name or by a number that describes the relative position of one scope to another. Scope 0 represents the current, or local, scope. Scope 1 indicates the immediate parent scope. Scope 2 indicates the parent of the parent scope, and so on. Numbered scopes are useful if you have created many recursive scopes.
因此,根据您的具体需求,您可以使用以下任何一种我相信的方式。
$global:BackupFile = "Win7x64-SP1.wim"
$script:BackupFile = "Win7x64-SP1.wim"
$1:BackupFile = "Win7x64-SP1.wim"