2013-02-21 68 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