Powershell - 在函数之外保持变量

时间:2017-10-24 17:29:44

标签: powershell

我正在尝试导入xml文件并将其存储为PowerShell会话的其余部分的变量。导入显然是成功的,但变量内容不会在函数之外持久存在。

Function auth
{
$cred = import-clixml -Path c:\temp\cred.xml
}

4 个答案:

答案 0 :(得分:1)

试试这个:

Function auth
{
$global:cred = "test"
}

auth
$global:cred

答案 1 :(得分:1)

你可以像Esperento57建议的那样使用全局变量,或者你可以这样做

function auth
{
    return 'test'
}

$cred = auth

更简洁:

function auth
{
    'test'
}

$cred = auth

答案 2 :(得分:0)

您需要先在函数作用域之外声明变量,然后在函数内部使用 script:var 方法明确告诉变量更新。


这里的例子取自 https://www.kongsli.net/2013/04/25/powershell-gotchas-refer-to-variables-outside-a-function/,给予信用。

<块引用>

问题是我们必须明确告诉 Powershell 更新父作用域中的变量,而不是在当前作用域中创建一个新变量。

$x = 1
function changeit {
  "Changing `$x. Was: $x"
  $script:x = 2
  "New value: $x"
}
"`$x has value $x"
changeit
"`$x has value $x"

答案 3 :(得分:0)

如果您需要这样做,但需要使用大量函数和变量,您可以将它们全部放入一个脚本中,然后点源脚本。

想象一个这样的脚本:

   #MyDevFunctions.ps1
   $myImportantVar = "somevar"
   $myOtherVar = "ABC123"
   Function Get-MyCoolValue(){$myImportantVar}
   Write-Host "Finished Loading MyDevFunctions"

如果您想运行它,然后还保留变量的值以及函数本身,您只需像这样从父脚本调用它:

   PS > . .\MyDevFunctions.ps1
   "Finished Loading MyDevFunctions"

   PS > $myOtherVar
   ABC123

   PS> Get-MyCoolValue
   someVar