1

次のように使用することを目的とした2つのカスタムPowerShell関数があります。

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

これを実行すると、Webサービスからエラーが発生します。

@{LoginName=UserName} not found

Webサービス関数に渡されるユーザー名は、@ {LoginName = username}ではなく、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送信していることです。これを修正するには、のパラメータを使用して、そのプロパティを持つオブジェクトの代わりにの値を送信します。このような:pscustomobjectselectloginnameselect-object-ExpandPropertyloginname

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 に答える