gpt4 book ai didi

powershell - 如何在 powershell 中实现输出变量?

转载 作者:行者123 更新时间:2023-12-01 07:52:23 28 4
gpt4 key购买 nike

我意识到“输出变量”在这里可能是错误的术语,这就是我的谷歌搜索失败的原因。我猜它围绕显式设置变量范围展开,但我尝试阅读 about_Scopes doc,它只是不适合我。

基本上我想要做的是实现 -SessionVariable 的等价物。来自 Invoke-RestMethod 的论点在我自己的模块的功能中。换句话说,我需要一个字符串参数,它会变成调用者范围内的变量。

function MyTest
{
param([string]$outvar)

# caller scoped variable magic goes here
set-variable -Name $outvar -value "hello world"

# normal function output to pipeline here
Write-Output "my return value"
}

# calling the function initially outputs "my return value"
MyTest -outvar myvar

# referencing the variable outputs "hello world"
$myvar

对于奖励积分,如果我包装具有自己的输出变量的现有函数并且我想有效地传递输出变量名称,事情会如何变化(如果有的话)?
function MyWrapper
{
param([string]$SessionVariable)

Invoke-RestMethod -Uri "http://myhost" -SessionVariable $SessionVariable

# caller scoped variable magic goes here
set-variable -Name $SessionVariable -value $SessionVariable
}

# calling the wrapper outputs the normal results from Invoke-RestMethod
MyWrapper -SessionVariable myvar

# calling the variable outputs the WebRequestSession object from the inner Invoke-RestMethod call
$myvar

附言如果重要的话,我会尝试使模块与 Powershell v3+ 兼容。

最佳答案

无需尝试自己实现,-OutVariableCommon Parameter .

添加 CmdletBinding attribute给您的param阻止免费获得这些:

function MyTest {
[CmdletBinding()]
param()

return "hello world"
}

MyTest -OutVariable testvar
$testvar现在保存字符串值“hello world”

对于第二个示例,除了管道输出之外,您还需要在调用者范围内设置一个值,请使用 -Scope带有 Set-Variable 的选项:
function MyTest {
[CmdletBinding()]
param([string]$AnotherVariable)

if([string]::IsNullOrWhiteSpace($AnotherVariable)){
Set-Variable -Name $AnotherVariable -Value 'more data' -Scope 1
}

return "hello world"
}

MyTest -AnotherVariable myvar
$myvar在调用者范围内现在包含字符串值“更多数据”。 1传递给 Scope 的值参数表示“上一级”

关于powershell - 如何在 powershell 中实现输出变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43331214/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com