2013-02-21 66 views
1

我都意味着兩個自定義PowerShell函數中使用,如:PowerShell的@ {}管道錯誤

Get-Users | Select LoginName | Get-UserJobStatus -StartDate 2013-02-19 -EndDate 2013-02-21 

當這是跑,我收到來自Web服務的錯誤:

@{LoginName=UserName} not found 

哪這是有道理的,因爲傳遞給Web服務函數的用戶名應該只是UserName而不是@ {LoginName = username}。我如何正確格式化?

function Global:Get-BackupJobStatus 
{ 
    [cmdletBinding()] 

    Param(
     [Parameter(
     Mandatory=$True, 
     HelpMessage='Specific account name.', 
     ParameterSetName='LoginName', 
     ValueFromPipeline=$True 
    )] 
     [System.String[]]$LoginName = $null, 

     [Parameter(
     Mandatory=$false, 
     HelpMessage='Start date for report.' 
    )] 
     [System.DateTime]$startDate, 

     [Parameter(
     Mandatory=$false, 
     HelpMessage='Ending date for report.' 
    )] 
     [System.DateTime]$EndDate 
    ) 

    Begin { 
     $tempXml = New-Object System.Xml.XmlDocument 
     Write-Output $StartDate.toString("yyyy-MM-dd") 
    } 

    Process{   
     $tempXml.Load("https://webservicecall/info.do?LoginName="+$LoginName+"&Date="+$startDate.toString("yyyy-MM-dd")) 
    } 

    End { 
     Write-Output $tempXml.Users.User 
    } 
} 
+1

我不承認獲取用戶。它從哪裏來,它輸出什麼?無論如何,我懷疑你需要將select改爲:| Select -ExpandProperty LoginName | – EBGreen 2013-02-21 15:16:56

+0

Get-Users是我寫的一個自定義函數。 – 2013-02-21 15:47:14

回答

4

的問題是,你的函數需要一個string -object作爲loginname輸入併發送pscustomobject(由select創建),屬性稱爲loginname。要解決此問題,請使用select-object-ExpandProperty參數發送值loginname而不是具有該屬性的對象。就像這樣:

Get-Users | Select -ExpandProperty LoginName | 
    Get-UserJobStatus -StartDate 2013-02-19 -EndDate 2013-02-21 
+0

這固定了它。謝謝! – 2013-02-21 15:47:32

1

如果你要使用「ValuefromPipeline」,那麼它需要只值:

Get-Users | Select -ExpandProperty LoginName | Get-UserJobStatus -StartDate 2013-02-19 -EndDate 2013-02-21 
2

或者,你可以添加ValueFromPipelineByPropertyName=$true,讓你的對象的LoginName屬性綁定在管道輸送到$的LoginName參數

+0

一個很好的補充,使其更加萬無一失:) – 2013-02-21 17:10:57