Powershell - 由函数变量

时间:2018-03-29 09:20:29

标签: powershell variables

我想要一个函数,其中结果存储在函数定义变量名的变量中 - 基本上就是这样:

function testfunction ($varname,$text){
    $readhost = read-host -prompt "$text"
    new-variable -name $varname -value $readhost
}

虽然输入时:

testfunction outputvar sampletext

get-variable -name outputvar

我只是得到一个错误,即变量“outputvar”不存在。我在这里想念的是什么?尝试过其他一些东西,但似乎什么都没有用 - 我最终想要的是一个名为“outputvar”的变量,它包含提示输入,只是为了澄清。

2 个答案:

答案 0 :(得分:5)

您的问题是由于范围界定。通过New-Variable创建的变量(默认情况下)作用域,以便只能在您的函数中访问它。您可以通过-Scope参数覆盖范围:

function testfunction ($varname,$text){
    $readhost = read-host -prompt "$text"
    new-variable -name $varname -value $readhost -scope Script
}

这会将范围更改为Script,因此现在可以在函数外部访问该变量。但是,为变量定义非标准范围并不是一种很好的做法。你应该这样做:

function testfunction ($text){
    read-host -prompt "$text"
}

$outputvar = testfunction sampletext

答案 1 :(得分:2)

使用-OutVariable常用参数。要让您的函数支持通用参数,请将CmdletBinding属性装饰器添加到param块:

function Test-Function {
  [CmdletBinding()]
  param($text)

  return Read-Host -Prompt $text
}

Test-Function -OutVariable sampletext |Out-Null
$sampletext