6

オブジェクトのリストを返す2つのCMDletがあります。1つはプロパティIdを含むSPSolutionタイプのオブジェクトを返し、もう1つはプロパティSolutionIdを持つSPFeatureタイプのオブジェクトを返します。

次に、このデータを次のように結合/マージします。

$f = Get-Feature
$s = Get-Solution
$result = <JOIN> $f $s
          <ON> $f.SolutionId = $s.Id
          <SELECT> FeatureName = $f.DisplayName, SolutionName = $s.Name
4

5 に答える 5

5

これは効率的ではなく、PowerShell 2 を想定していますが、次のように機能するはずです。

$solutions = Get-Solution

foreach ($f in Get-Feature) {

    $filteredSolutions = $solutions |
        where-object { $_.Id -eq $f.SolutionId }

    foreach ($s in $filteredSolutions) {
        new-object PSObject -prop @{
            FeatureName = $f.DisplayName
            SolutionName = $s.Name
        }
    }
}

私は SharePoint をインストールしていないので、これをテストできないことに注意してください。

于 2010-04-20T09:30:14.567 に答える
3

キース・ヒルが言ったことに基づいて構築すると、2ライナーにすることで効率が大幅に向上します。この方法では、Get-Feature によって返されるすべてのオブジェクトに対して、Get-Solution を再度実行するのではなく、1 回だけ実行します。

$Solutions = Get-Solution
Get-Feature | % {$f = $_; $Solutions | ? {$f.SolutionId -eq $_.Id} | 
                 Select Name,@{n='FeatureName';e={$f.DisplayName}}}
于 2012-02-24T01:39:20.280 に答える
2

トリックを実行する必要があるワンライナーを次に示します (ネストされたパイプラインに依存しています)。

Get-Feature | % {$f = $_; Get-Solution | ? {$f.SolutionId -eq $_.Id} | 
                 Select Name,@{n='FeatureName';e={$f.DisplayName}}}
于 2010-04-20T15:29:31.230 に答える
1

それは単純で、おそらくもっと多くの作業を使用する可能性がありますが、それは仕事をします.

function Join-Object {
  param ( [PSObject[]] $objects, $where, $proplist)
    for ($i=0;$i -le $objects.length;$i++) {
      if ($objects[$i+1] -ne $null) {$out += $objects[$i] | %{$o=$_;$objects[$i+1] | where $where | Select -property $proplist} } };
  $out
}

$whereはスクリプト ブロックであり、$proplistSelect-Object 用に書式設定されたプロパティの配列です。
2 つのオブジェクトを渡す場合に機能します。もっとうまくいくことを願っていますが、まだ試していません。

于 2011-09-01T21:44:18.537 に答える