Frage

Ich habe zwei Cmdlets bekommt, die Listen von Objekten zurück. Eine Rendite-Objekte des Typs SPSolution, die die Eigenschaft Id enthält, die andere gibt Objekte des Typs SPFeature mit einer Eigenschaft SolutionId.

Jetzt will ich beitreten / merge diese Daten so etwas wie folgt aus:

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

Lösung

Es ist nicht effizient, und es wird davon ausgegangen Powershell 2, aber es sollte die Arbeit machen:

$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
        }
    }
}

Beachten Sie, dass ich nicht von Sharepoint installiert haben, so fürchte ich, dass ich das nicht testen können!

Andere Tipps

Gebäude weg, was Keith Hill sagte erheblich verbessern Effizienz kann es eine 2-Liner zu machen. Auf diese Weise kann nur Get-Lösung läuft einmal stattdessen wieder für jedes Objekt zurück von Get-Eigenschaft

$Solutions = Get-Solution
Get-Feature | % {$f = $_; $Solutions | ? {$f.SolutionId -eq $_.Id} | 
                 Select Name,@{n='FeatureName';e={$f.DisplayName}}}

Hier ist ein Einzeiler, die den Trick tun sollte (basiert auf verschachtelten Pipelines):

Get-Feature | % {$f = $_; Get-Solution | ? {$f.SolutionId -eq $_.Id} | 
                 Select Name,@{n='FeatureName';e={$f.DisplayName}}}

Es ist einfach und wahrscheinlich mehr Arbeit verwenden können, aber es macht den Job.

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 ist ein Skriptblock, und $proplist ist ein Array von Eigenschaften für Select-Object formatiert.
Es funktioniert in zwei Objekten vorbei. Hoffe, es würde für mehr Arbeit, aber habe es noch nicht ausprobiert.

(Get-Feature | Select @{Name="FeatureName";Expression={$_.DisplayName}) | Join (Get-Solution | Select @{Name="SolutionName";Expression={$_.Name}) SolutionId -eq Id

Siehe auch: In Powershell, was ist der beste Weg, um zwei Tabellen in eine?

beitreten
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top