簡體   English   中英

Powershell 管道處理 - $_ 有效但 $ParamName 無效

[英]Powershell Pipeline Processing - $_ Works but $ParamName Does Not

我無法理解這種行為...

鑒於這樣的 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 $_”有效。 但是為什么“Write-Host $InputVariable”會輸出一個空字符串呢?

我必須如何定義參數,以便我可以通過管道和作為命名參數(即 - ./script.ps -InputVariable "something")傳遞值?

這有效: "someservername" | ./script 這不起作用:./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"
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM