使用PowerShell更新RootFolder的Properties属性

在开发过程中,经常会将自定义的数据保存到list的RootFolder的属性Propertis中,这个属性一个字典,例如使用如下PowerShell,可以将一个自定义的key “MyTestPropertyKey”,添加到Properties字典中:

 $myweb = Get-SPWeb http://sp2013                                                  //获取站点 
 $mylist = $myweb.Lists["Composed Looks"]                                          //获取列表
 $myList.RootFolder.Properties["MyTestPropertyKey"] = "MyTestPropertieyValue"      //添加key-value
 $myList.RootFolder.Update()                                                       //更新RootFolder

使用SharePoint Manager (SharePoint 2013版本),就可以看到刚刚添加的这个属性



Properties属性只允许保存字符串,整数和日期类型的数据,如果是其他类型,在执行RootFolder.Update()方法的时候,就会报如下错误


“Exception calling "Update" with "0" argument(s): "Only String,INT,and DateTime datetypes can be used as the value in Properties.”

我今天就遇到这个错误了,本打算把本地的一个xml文件中的xml数据保存在Properties中,结果保存的时候出错。

我是使用Get-Content这个powershell命令读取xml文件的:

$xmlValue = Get-Content C:\users\user1\desktop\xmlfile.xml
结果发现Get-Content的返回值$xmlValue的类型是一个Array数组,所以Get-Content这个命令认是一行一行来读文件的。

查看Get-Content的帮助之后发现,如果需要返回字符串,还需要指定 -raw :

$xmlValue = Get-Content -raw C:\users\user1\desktop\xmlfile.xml
这样读取出来的值是字符串类型的:



虽然数据的类型正确了,但是在执行RootFolder.Update()的时候还是会报错:


经过研究发现,虽然返回值是字符串,但是在赋值的时候,还是需要显示转换才行,所以正确的赋值方法应该是:

$xmlValue = Get-Content -raw c:\users\user1\desktop\xmlfile.xml
$myList.RootFolder.Properties["MyTestPropertyKey"] = [System.String]$xmlValue
$myList.RootFolder.Update()

相关文章

php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念