有人可以告訴我我在這裏失蹤了什麼嗎?PowerShell中的函數範圍變量(使用高級方法)?
function Test-Cmdlet {
[CmdletBinding()]
Param (
[string] $Prepend,
[parameter(ValueFromPipeline=$true)] [string] $OtherString
)
BEGIN
{
if ($Prepend -eq $null) {
$Prepend = ".."
}
}
PROCESS
{
write-host ($Prepend + $OtherString)
}
}
# success:
PS> @("ab", "cd") | Test-Cmdlet "-"
-ab
-cd
# failure:
PS> @("ab", "cd") | Test-Cmdlet
ab
cd
# should be:
..ab
..cd
爲什麼$前置沒有得到設置?
我試過在BEGIN/PROCESS塊之外聲明變量,但解釋器不接受這個。
我試過使用:Set-Variable -Name "Prepend" -Value ".." -Scope 1
(和範圍0和範圍2),而不是:$Prepend = ".."
,但仍然沒有任何工作。
我熟悉$global:Variable
,但任何想法如何使用高級方法在cmdlet中獲取函數範圍的變量?
編輯:
的解決方案,如下面,就是:
function Test-Cmdlet {
[CmdletBinding()]
Param (
[string] $Prepend,
[parameter(ValueFromPipeline=$true)] [string] $OtherString
)
BEGIN
{
$_prepend = $Prepend
if (!$Prepend) {
$_prepend = ".."
}
}
PROCESS
{
write-host ($_prepend + $OtherString)
}
}
這樣可以繞過這個問題,但是您可以不只是聲明參數的默認值嗎? '[string] $ Prepend =「..」,' – Matt 2014-11-22 02:40:36
@Matt,是的,但這只是一個示例問題,真正的問題不是設置默認值,而是更改BEGIN塊中的參數 – 2014-11-25 08:48:34