2013-08-26 108 views
0

美好的一天。我正在使用名爲PowerCLI 5.1的PowerShell變體。我使用它來更新與VMware虛擬中心數據庫的多個項目多列的SharePoint 2013列表。我使用的代碼是這樣的:使用powershell更新Sharepoint列表

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列表。任何幫助將不勝感激,謝謝。

回答

0

你是不是實際上是通過虛擬機屬性(你一直把同一個虛擬機屬性爲每個項目)迭代這是我以前從一個列表去另一個列表(一種相同的你)的代碼。

#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() 

} 
相關問題