У меня проблемы с пониманием этого поведения ...
С учетом такого скрипта 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 "что-то")?
Это работает: "someservername" | ./script Это не работает: ./script -SqlServer "someservername"
Спасибо.