Использование powershell для обновления списка Sharepoint

Добрый день. Я использую вариант PowerShell под названием PowerCLI 5.1. Я использую это для обновления многостолбцового списка SharePoint 2013 несколькими элементами из базы данных VMware Virtual Center. Код, который я использую, таков:

Add-PSSnapin Microsoft.SharePoint.PowerShell
$viservers = "MyServer"
ForEach ($singleViserver in $viservers)

{
   Connect-VIServer $singleViserver -User domainuser -Password accountpassword

    $HostReport = @()
    Get-Datacenter -Name NYDC | Get-VM |Get-View| %{
    $Report = "" | select Name, VMos, IP, NumCPU, MemoryMB, FQDN, Status, Admin1, Admin2
    $Report.Name =$_.Name
    $Report.VMos =$_.Summary.Config.GuestFullName
    $Report.IP =$_.Guest.IPAddress
    $Report.NumCPU =$_.Config.Hardware.NumCPU
    $Report.MemoryMB =$_.Config.Hardware.MemoryMB
    $Report.FQDN =$_.Guest.HostName
    $Report.Admin1 = (Get-VIObjectByVIView $_).CustomFields["Admin1"]
    $Report.Admin2 = (Get-VIObjectByVIView $_).CustomFields["Admin2"]
    $HostReport += $Report
  }
}   

$web = Get-SPWeb http://mysharepointsite
$list = $web.Lists["MYVMList"]
foreach ($item in $list.Items)

 {
   $item["Name"] = $Report.Name;
   $item["Guest_OS"] = $Report.VMos;
   $item["Memory_Size"] = $Report.MemoryMB;
   $item["CPU_Count"] = $Report.NumCPU;
   $item["IP_Address"] = $Report.IP;
   $item["FQDN"] = $Report.FQDN;
   $item["Admin1"] = $Report.Admin1;
   $item["Admin2"] = $Report.Admin2;
   $item.Update();
 }

Однако кажется, что весь мой список заполнен только первыми свойствами виртуальной машины и игнорируются все остальные виртуальные машины. Теперь я знаю, что первая часть моего кода работает, потому что я могу правильно обновить электронную таблицу Excel со всеми моими виртуальными машинами и их свойствами.

Я не уверен, что я сделал неправильно, обновив список SharePoint с помощью этих свойств. Любая помощь будет оценена, спасибо.


person Jason Sheets    schedule 26.08.2013    source источник


Ответы (1)


На самом деле вы не перебираете свойства виртуальной машины (вы продолжаете помещать одно и то же свойство виртуальной машины в каждый элемент). Вот код, который я использовал для перехода из одного списка в другой список (вроде как вы).

#Check for snappin
if((Get-PSSnapin | Where {$_.Name -eq "Microsoft.SharePoint.PowerShell"}) -eq $null) {Add-PSSnapin Microsoft.SharePoint.PowerShell;}

#array to hold key value
$tests = @()

#web items are going to
$web = Get-SPWeb "https://share.site/departments/it"

$Global:list = $web.Lists["locations"]

#web items come from
$sourceWebURL = "https://share.site"
$sourceListName = "locations"
$spSourceWeb = Get-SPWeb $sourceWebURL
$Global:spSourceList = $spSourceWeb.Lists[$sourceListName] 

$spSourceItems = $spSourceList.Items 
$spSourceItems | % {
    $tests += $_["Acronym"] #key value used in both lists
}


foreach ($test in $tests) {
    $mainItem = $Global:spSourceList.Items | where {$_['Acronym'] -like $test}
    $newItem = $Global:list.Items | where {$_['Acronym'] -like $test}

    $newItem["Short Name"] = $mainItem["Short Name"] #do this for all item updates
    $newItem.Update()

}
person Robert    schedule 30.10.2013