现在的位置: 首页 > 综合 > 正文

使用SharePoint 2010的PowerShell完成Object Model编程才能完成的功能的一个实例

2012年06月18日 ⁄ 综合 ⁄ 共 1986字 ⁄ 字号 评论关闭

Object Model的代码如下:

using (SPSite osite = new SPSite("http://ServerName:20000/"))
            {
                //Show the SPWeb's title before we move on
                Console.WriteLine(osite.RootWeb.Title);
                using (SPWeb oweb = osite.RootWeb)
                {
                    //Use group login name to find the group
                    SPUser ouser = oweb.AllUsers["domain\\groupname"];
                    Console.WriteLine(ouser.Name);

                    //Change the group's display name
                    ouser.Name = "domain\\groupdisplayname";

                    //Update the group
                    ouser.Update();
                    Console.WriteLine(ouser.Name);
                }
            }

这段代码的功能是查找登录名为domain\groupname的用户, 把这个用户的显示名修改为groupdisplayname.

代码编译执行后, 该用户使用domain\groupname登录站点, 但是他的显示名称却被改成了groupdisplayname.

 

假设你也和我一样, 对powershell了解的少之又少. 别怕, 让我们一步步地把这里的代码转换为powershell的脚本吧.

 

第一步

============

如果你打开了PowerShell的命令行窗口, 脑子里却一片空白, 那么应该如何开始呢?

你可以使用Get-Command命令来找一下你可以使用的命令. 注意, PowerShell在命令里似乎不怎么用缩写. 所以你可以用你所知道的关键字来进行搜索.

从上面的代码可以看到, 我们需要先创建一个SPSite对象, 那就用"SPSite"来搜索吧. 输入:

get-command *spsite*

结果如下:

image

简单瞄一眼, 觉得get-spsite比较靠谱, 继续.

 

第二步

===========

PowerShell命令的字符串参数是要用引号括起来来的. 输入下面的命令:

$oSite=Get-SPSite "http://servername"

然后输出其RootWeb的Title属性, 以确认所操作的对象.

image

可以看到Title属性的值是"Publishing Portal".

 

第三步

===========

如果我们对SPWeb不熟悉, 想看看它都有什么属性怎么办? 命令行窗口可不像Visual Studio, 打个"."后自动列出属性和方法. 我们需要使用命令来查看对象的属性和方法. 我们需要的属性是AllUsers, 就用"User"来搜索一下吧. 输入下面的命令:

$oWeb|get-member *user*

结果如下:

image

 

找到了AllUser属性之后, 我们就可以使用它了.

image

 

为确保万无一失, 我们还是看一眼$oGroup的属性吧.

image

嗯, 放心大胆的改吧.

 

第四步

============

输入命令如下:

$oGroup.DisplayName="domain\groupdisplayname"

结果如图:

image

 

第五步

============

了解SharePoint Object Model的人都知道, 这个属性的修改如果要固定下来, 需要调用一次Update方法才能写回到数据库中, 永久生效.

从这个调用中可以看到, PowerShell跟C#还是有点像的, 比较好用. 呵呵.

image

 

大功告成!

 

另外

===========

你还可以把上面的命令写入一个后缀名为ps1的文本文件中, 然后在PowerShell中运行这个脚本文件.

$oSite=Get-SPSite "http://servername"
$oWeb=$oSite.OpenWeb()
$oGroup=$oWeb.AllUsers["olddomain\oldname"]
$oGroup.DisplayName="newdomain\funnyname"
$oGroup.Update()
$oGroup

 

结果如图:

image

 

脚本比使用C#编写的程序在使用上要方便很多. 这里提到的技巧还是很有用的.

 

参考资料:

Introduction to Windows PowerShell Get-Member

http://www.computerperformance.co.uk/powershell/powershell_get_member.htm 

Running Windows PowerShell Scripts

http://technet.microsoft.com/en-us/library/ee176949.aspx

PowerShell入门

http://www.cnblogs.com/awpatp/archive/2010/07/20/1781577.html

抱歉!评论已关闭.