سؤال

لقد حصلت على اثنين من cmdlets التي تعود قوائم الكائنات. يقوم المرء بإرجاع الكائنات من نوع spsolution ، الذي يحتوي على معرف الخاصية ، وإرجاع الكائنات الأخرى من نوع spfeature مع حل خاصية.

الآن أريد الانضمام/دمج هذه البيانات شيئًا مثل هذا:

$f = Get-Feature
$s = Get-Solution
$result = <JOIN> $f $s
          <ON> $f.SolutionId = $s.Id
          <SELECT> FeatureName = $f.DisplayName, SolutionName = $s.Name
هل كانت مفيدة؟

المحلول

هذا ليس فعالًا ، ويفترض أن 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 مثبتة ، لذا أخشى أنه لا يمكنني اختبار هذا!

نصائح أخرى

بناء ما قاله كيث هيل ، مما يجعله بطانة 2 يمكن أن يحسن الكفاءة بشكل كبير. وبهذه الطريقة ، تقوم فقط بتشغيل حل مرة واحدة بدلاً من مرة أخرى لكل كائن يتم إرجاعه عن طريق الحصول على الميزة

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

إليك خط واحد يجب أن يقوم بالخدعة (يعتمد على خطوط الأنابيب المتداخلة):

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

الأمر بسيط وربما يمكن أن يستخدم المزيد من العمل ، لكنه يقوم بالمهمة.

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 هي كتلة نصية ، و $proplist هي مجموعة من الخصائص المنسقة للاختيار.
إنه يعمل لتمرير كائنين. آمل أن ينجح الأمر أكثر ، لكن لم يحاول ذلك بعد.

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

نرى: في PowerShell ، ما هي أفضل طريقة للانضمام إلى طاولتين في واحد؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top