使用Powershell

时间:2015-07-28 15:00:59

标签: web-services powershell sharepoint-2007

我正在尝试自动将记录添加到Sharepoint中的列表中。我正在关注这篇文章

http://blogs.msdn.com/b/powershell/archive/2010/06/24/using-new-webserviceproxy-to-get-modify-and-add-items-to-a-list-in-sharepoint-2007.aspx

但仍然收到错误。

迄今为止的代码:

$packet = [System.Xml.Linq.XElement]::Parse(@"
<Batch OnError="Continue" ListVersion="1">
 <Method ID="1" Cmd="New">
  <Field Name="Checked At">2006-1-11T09:15:30Z</Field>
  <Field Name="Cold">0</Field>
  <Field Name="Inbox">0</Field>
 </Method>
</Batch>
"@).Root;
$uri = "http://.../_vti_bin/Lists.asmx";
$listName = "Daily Check";
$lists = New-WebServiceProxy -Uri $uri -UseDefaultCredential;
$lists.UpdateListItems($listName,$packet);

这会不断返回错误:

Exception calling "UpdateListItems" with "2" argument(s): "Exception of type 'Microsoft.SharePoint.SoapServer.SoapServerException' was thrown."
At line:14 char:1
+ $lists.UpdateListItems($listName,$packet);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SoapException

错误消息中似乎没有太多其他信息。

$lists

的输出
SoapVersion                          : Default
AllowAutoRedirect                    : False
CookieContainer                      : 
ClientCertificates                   : {}
EnableDecompression                  : False
UserAgent                            : Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.0)
Proxy                                : 
UnsafeAuthenticatedConnectionSharing : False
Credentials                          : System.Net.SystemNetworkCredential
UseDefaultCredentials                : True
ConnectionGroupName                  : 
PreAuthenticate                      : False
Url                                  : http:// ... /_vti_bin/Lists.asmx
RequestEncoding                      : 
Timeout                              : 100000
Site                                 : 
Container                            : 

更新

看起来read方法没问题,但是write导致了错误。不幸的是,没有足够的关于错误的信息来采取行动。

1 个答案:

答案 0 :(得分:0)

您的代码似乎没有问题,只是您要将参数1中的列表名称发送到updatelistitems。我们有类似的代码,但我们在第一个参数中使用了listid。

要从列表名称中获取列表的ID,请执行以下操作。

$listidandviewid = $lists.getlistandview($listname, "")
$listid = $listandviewid.childnodes.item(0).name

如果你也想要viewid,你也可以使用。

$viewid = $listandviewid.childnodes.item(1).name

然后最后使用listid

$lists.UpdateListItems($listid,$packet);

希望它适合你!