بوويرشيل-تكرار من خلال جميع الشبكات ، ثم تكرار من خلال جميع القوائم ، ثم إضافة عمود حيث قائمة هو اسم معين
-
10-12-2019 - |
سؤال
أحاول تجميع نص برمجي يجب أن يتكرر من خلال جميع الشبكات في مجموعة مواقع ، ثم يتكرر من خلال جميع القوائم في تلك الشبكات ، ثم أضف عمودا حيث تحتوي القائمة على اسم معين.
هذا ما لدي حتى الآن:
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$True,Position=1)]
[string]$sc
)
$spsite = Get-SPsite $sc
foreach ($web in $spsite.AllWebs)
{
foreach ($list in $spsite.AllWebs)
{
$splist = $list.Lists["PSList"]
$splist.Fields.Add("Calc", "Calculated", 0)
$spfield = $splist.Fields.Getfield("Calc")
$spfield.formula = "=TEXT([Start Date],`"mm/dd/yyyy`")`&`" - `"`&TEXT([End Date],`"mm/dd/yyyy`")"
$spfield.outputtype = "Text"
$spfield.update()
}
}
$spsite.dispose()
هذا هو الخطأ الذي أحصل عليه:
لا يمكنك استدعاء طريقة على تعبير قيمة فارغة.في C:\scripts\addcalc.ps1:24 شار: 22 + spl سبليست.الحقول.إضافة <<<< ("احسب" ، "محسوب" ، 0) + الفئةالمعلومات :إنفاليدوبيراتيون:(إضافة: سلسلة) [] ، رونتيميكسيبتيون + بالكاملالمؤهلإساءة :إنفوكيميثودونول
أنا متأكد من ذلك لأنني لا أتكرر من خلال الشبكات ثم من خلال خاصية القوائم.ما هي الطريقة الصحيحة لتحقيق ما أحاول القيام به?
المحلول
أولا - يجب عليك حذف foreach ($list in $spsite.AllWebs)
ثم ابحث عن القائمة باستخدام
$list = $web.Lists["InternalNameOfTheList"]
أو
$list = $web.GetList($web.Url + "/Lists/" + $ListName)
وبعد ذلك إضافة عمود باستخدام
$spFieldType = [Microsoft.SharePoint.SPFieldType]::Text //change to your field type
$list.Fields.Add("YourColumn",$spFieldType,$false)
$list.Update()
والتخلص من كائن سبويب بعد استخدامه ، كما تفعل لكائن سبسيت .
نصائح أخرى
شكرا أندري.اقتراحك قادني إلى أسفل المسار الصحيح.إليك إصدار العمل النهائي من البرنامج النصي الذي يحل السؤال الأصلي. giveacodicetagpre.