gpt4 book ai didi

powershell - Powershell管道处理-$ _有效,但$ ParamName不起作用

转载 作者:行者123 更新时间:2023-12-03 00:57:46 24 4
gpt4 key购买 nike

我无法理解这种行为...

给定这样的Powershell脚本(用实际代码更新)...

[cmdletbinding(DefaultParameterSetName="Default")]
param (
[cmdletbinding()]

[Parameter( Mandatory=$true,
ValueFromPipeline = $true,
ParameterSetName="Default")]
[Parameter(Mandatory=$true, ParameterSetName="Azure")]
[Parameter(Mandatory=$true, ParameterSetName="AWS")]
[Alias("Server")]
[String[]] $SqlServer,

# other parameters
)

BEGIN {}
PROCESS {


<# *************************************
PROCESS EACH SERVER IN THE PIPELINE
**************************************** #>
Write-Debug "Processing SQL server $_..."
# GET SMO OBJECTS
$Error.Clear()
try {
# GET CONNECTION TO TARGET SERVER
$_svr = _get-sqlconnection -Server $_ -Login $DatabaseLogin -Pwd $Password

# PROCESS DATABASES ON SERVER
} catch {

$Error

}
} END {}

据我了解,$ _是管道中的当前对象,我想我理解为什么“写主机$ _”有效。但是,为什么“Write-Host $ InputVariable”输出一个空字符串?

如何定义参数,以便既可以通过管道又可以将值作为命名参数(即-./script.ps -InputVariable“something”)传递?

这有效:“someservername” | 。/脚本
这不起作用:./script -SqlServer“someservername”

谢谢。

最佳答案

仅在处理管道输入时才填充$_

如果您要接受两个:

"string","morestrings" | ./script.ps1
# and
./script.ps1 -MyParameter "string","morestrings"

...然后使用以下模式:
[CmdletBinding()]
param(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)]
[string[]]$MyParameter
)

process {
foreach($paramValue in $MyParameter){
Write-Host "MyParameter: $paramValue"
}
}

关于powershell - Powershell管道处理-$ _有效,但$ ParamName不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60384090/

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