【发布时间】:2020-02-24 21:21:56
【问题描述】:
我无法理解这种行为...
给定这样的 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 -SqlServer "someservername"
谢谢。
【问题讨论】:
-
提供的代码没有按原样运行。
-
请修复
param块中的问题([cmdletbinding]->[cmdletbinding()],Paramter->Parameter)并告诉我们 1) 您使用的是哪个版本的 PowerShell看到这种行为和 2) 你传递给脚本的输入:) -
在进行@MathiasR.Jessen 提到的修复后,代码按预期工作。 IE。
Write-Host $_和Write-Host $InputVariable在提供非空输入时输出非空字符串。 -
@bprocket 您正在运行的实际代码是什么?我感觉您在此处提供的示例与您在其中观察问题的代码大不相同。
-
代码示例已更新。我试图在代码示例中不要过于冗长。如果有帮助,请告诉我。
标签: powershell pipeline