1

我有两个自定义的 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
    }
}
4

3 回答 3

4

问题是您的函数需要一个string-object 作为loginname输入,而您正在发送一个pscustomobject(由 创建select),其属性名为loginname. 要解决此问题,请使用select-object's-ExpandProperty参数发送值loginname而不是具有该属性的对象。像这样:

Get-Users | Select -ExpandProperty LoginName |
    Get-UserJobStatus -StartDate 2013-02-19 -EndDate 2013-02-21
于 2013-02-21T15:19:40.653 回答
2

或者,您可以添加ValueFromPipelineByPropertyName=$true以允许您将管道中对象的 LoginName 属性绑定到 $LoginName 参数

于 2013-02-21T16:42:15.197 回答
1

如果您要使用“ValuefromPipeline”,那么它只需要是值:

Get-Users | Select -ExpandProperty LoginName | Get-UserJobStatus -StartDate 2013-02-19 -EndDate 2013-02-21
于 2013-02-21T15:17:08.190 回答