0

再会。我正在使用一种称为 PowerCLI 5.1 的 PowerShell 变体。我正在使用它来更新包含来自 VMware Virtual Center 数据库的多个项目的多列 SharePoint 2013 列表。我正在使用的代码是这样的:

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();
 }

但是,它似乎只用第一个 VM 属性填充了我的整个列表,而忽略了所有其他 VM。现在我知道我的代码的第一部分可以正常工作,因为我可以使用我的所有 VM 及其属性正确更新 Excel 电子表格。

我不确定在使用这些属性更新 SharePoint 列表时我做错了什么。任何帮助将不胜感激,谢谢。

4

1 回答 1

0

您实际上并没有遍历 VM 属性(您一直将相同的 VM 属性放入每个项目中) 这是我用来从一个列表到另一个列表的代码(与您相同)。

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

}
于 2013-10-30T19:27:58.307 回答