[英]-split ' ' that works locally in Powershell does not work in a Azure pipeline Powershell task
[英]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.