我想要一个函数,其中结果存储在函数定义变量名的变量中 - 基本上就是这样:
function testfunction ($varname,$text){
$readhost = read-host -prompt "$text"
new-variable -name $varname -value $readhost
}
虽然输入时:
testfunction outputvar sampletext
get-variable -name outputvar
我只是得到一个错误,即变量“outputvar”不存在。我在这里想念的是什么?尝试过其他一些东西,但似乎什么都没有用 - 我最终想要的是一个名为“outputvar”的变量,它包含提示输入,只是为了澄清。
答案 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