背景信息:

通常在SharePoint环境中我们会使用很多的服务账号来运行各种不同的服务,尤其在企业环境中,由于权限管理条例严格,这些服务账号更是只能多不能少。面对如此多的服务账号,各个企业都会有自己管理账号的方式方法,比如使用KeyPass或者直接将密码明文文档化之类的方法等等。不过,万一的万一,你的密码丢掉了你要怎么办呢?

如果直接更换服务账号的密码,那么它所运行的服务很可能出现问题和错误。虽然SharePoint也给出了专门用于更换服务账号密码的命令方法,大大降低了风险,但不管怎么说,如果能直接把这些账号的密码找回来肯定是最安全的途径,所以值得一试。

前几天我就遇到这么一件事情,我们的一个SharePoint 2007的环境里因为时间过久,居然把所有在用的6个服务账号密码全部丢失了。。。这影响到了一系列的升级和纠错工作,于是我就开始想办法看能不能找回密码。在上网找资料的过程中,我找了这篇文章,虽然它是针对Windows Server 2008 + SharePoint 2010来写的,但还是给了我很大启示,稍后我也会写另一篇文章介绍如何在windows Server 2003+SharePoint 2007的环境中找回服务账号密码的方法。今天我们先说说这个。

解决方法:

文章的作者叫 Roger Cormier,他写了一个PowerShell脚本来专门找回服务账号的密码。

这样做有几个前提,首先你得使用IIS7并且安装有Appcmd.exe工具,因为它是找回密码的关键。

咱们先来直接看代码和中文注解

 #设置变量 

 $AccountToRetrieve = "Domain\User" #指定你要找回密码的服务账号,这是整个代码中唯一需要你指定的内容,其它部分都可以照搬到你的环境中使用

 #创建函数

 Function VerifyTimerJob ($Filter)
{
$Timer = Get-SPTimerJob | ? {$_.displayname -like $Filter}
If ($Timer)
{
$timer.Delete()
}
} #开始执行 $Farm = get-spfarm | select name $Configdb = Get-SPDatabase | ? {$_.name -eq $Farm.Name.Tostring()} $ManagedAccount = get-SPManagedAccount $AccountToRetrieve #从Farm中获取你要找回密码的服务账号对象 $WebApplication = new-SPWebApplication -Name "Temp Web Application"
-url "http://tempwebapplication"
-port 80
-AuthenticationProvider (New-SPAuthenticationProvider)
-DatabaseServer $Configdb.server.displayname
-DatabaseName TempWebApp_DB
-ApplicationPool "Password Retrieval"
-ApplicationPoolAccount $ManagedAccount
-hostheader "http://tempwebapplication"
#使用上一步中得到的服务账号来创建一个新的临时Web Application,而这个服务账号也就被用作了ApplicationPool的账号。这一步中没有要求你手动填写密码是由于上一步中直接得到的是服务账号的对象,里面已经包含了密码信息,所以在创建Web Application的时候直接指定给ApplicationPoolAccount这个属性即可,免去了输入密码的步骤。 $Password = cmd.exe /c $env:windir\system32\inetsrv\appcmd.exe list apppool "Password Retrieval" /text:ProcessModel.Password
#这步是最关键的,它通过调用appcmd.exe直接获取了上一步中我们新建的web application在IIS Application Pool中的服务账号密码。坦率的说,我也不明白为什么IIS要留出这么一个看上去很不安全的方法,也许微软有自己的考虑吧。 Write-Host "Password for Account " $AccountToRetrieve " is " $Password $Filter = "Unprovisioning *" + $Webapplication.Displayname + "*" VerifyTimerJob($Filter)
Remove-SPWebApplication $WebApplication -DeleteIISSite -RemoveContentDatabases -Confirm:$False
VerifyTimerJob($Filter)
#这几步都是一些后续工作,删除相关的timerjob和临时的web application,不做详解。 $ProvisionJobs = Get-SPTimerJob | ? {$_.displayname -like "provisioning web application*"}
if ($ProvisionJobs)
{
foreach ($ProvisionJob in $ProvisionJobs)
{
$ProvisionJob.Delete()
}
}

效果图如下:

其实看过脚本之后,很容易明白其实最关键的就是那句appcmd.exe list apppool "Password Retrieval" /text:ProcessModel.Password

通过appcmd的这个方法,你可以取出所有在Application Pool中已存在的application的账号密码,并且明文输出。而这个脚本其实做的就是用你指定的服务账号来在IIS中创建一个application,进而用此命令得到其账号密码。

由于我不是iis专家,对于其安全性就不做过多评论了。

在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码的更多相关文章

  1. 关于SharePoint 2010中不能使用AjaxControlToolkit的解决办法

    因为项目中有一个需求需要使用calendar控件,而且样式要和Reporting Service中的尽量一致,搜索了很久发现还是微软的AjaxControlToolkit提供的CalendarExte ...

  2. SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)

    由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...

  3. 在Sharepoint 2010中启用Session功能的说明文档

    在Sharepoint 2010中启用Session功能的说明文档 开发环境:Windows 7系统,SharePoint Server 2010,Visual Studio 2010 按以下步骤进行 ...

  4. 在SharePoint 2010中创建网站的权限级别

    转:http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能,使我们对权限的设置又提高了一个层 ...

  5. 在 SharePoint 2010 中访问数据

    转:http://blog.banysky.net/?p=81001 数据访问的关键方法有哪些? | 使用查询类 | 使用 SPQuery | 使用 SPSiteDataQuery | 使用 LINQ ...

  6. 为SharePoint 2010中的FBA创建自定义登录页面

    SharePoint 2010中默认的FBA登录页面非常简单,只提供了一个Asp.Net的Login控件,让用户输入用户名和密码.在大多数情况下,我们需要定制这个页面以满足一些安全需求,比如为登录页面 ...

  7. 在SharePoint 2010中部署RBS (转)

    一.RBS(Remote BLOB Storage)简单介绍 在SharePoint的大部分企业应用案例中,SharePoint都是要承担着非常繁重的文件管理工作,这些文件类型包含了Word文档,Ex ...

  8. VSTO学习笔记(四)从SharePoint 2010中下载文件

    原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...

  9. SharePoint 2010 中创建超链接到Pop-Up对话框

    SharePoint 2010 中创建超链接到Pop-Up对话框         SharePoint 2010 推出了新式的带有阴影的弹出对话框,你感觉怎么样?我感觉倒是挺酷的.这样少打开了一个页面 ...

随机推荐

  1. Java 8 新特性之泛型的类型推导

    1. 泛型究竟是什么? 在讨论类型推导(type inference)之前,必须回顾一下什么是泛型(Generic).泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据 ...

  2. 同个项目写webservice引用EF出现的问题

    错误1: 定的架构无效.错误: DataModel.ssdl(2,2) : 错误 0152: 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供 ...

  3. 基于SOUI开发的应用展示

    本页面列出基于SOUI开发的产品 欢迎使用SOUI的朋友提供资源:setoutsoft#qq.com  #->@ 千万级平台后台在线监测客户端 1, 主页:用于显示管理服务端在线情况,左侧栏包括 ...

  4. git客服端基本操作

    以下操作基于git+gerrit 1.生成公钥 ssh -keygen -t rsa 默认公钥生成路径  C:\Documents and Settings\用户名\.ssh 2.配置姓名和邮箱地址 ...

  5. 进击的Python【第七章】:Python的高级应用(四)面向对象编程进阶

    Python的高级应用(三)面向对象编程进阶 本章学习要点: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 一.面向对象高级语法部分 静态方法 ...

  6. SQL 数字分割的字符串

    :表示包含正数或者负数.或者0 即表示,数字的字段! select * from 表名 where isnull(字段名,'')<>'' 同时排除空值和null的情况 select coo ...

  7. 转:简单窗体振动-WaitForSingleObject,消息,winapi

    http://www.cnblogs.com/Jekhn/archive/2012/08/25/2656656.html 线程,消息函数,SetWindowPos设置窗体位置 if WaitForSi ...

  8. JQuery基本知识框架思维导图(上)

    一:认识jQuery 1.window.onload与$(document).ready()的对比 2.jQuery代码风格(1:链式代码风格2:位代码添加注释) 3.jQuery对象和DOM对象(1 ...

  9. KMP匹配算法 - Number Sequence

    Given two sequences of numbers : a[1], a[2], ...... , a[N], and b[1], b[2], ...... , b[M] (1 <= M ...

  10. Python微信-- 分享接口(分享到朋友圈、朋友、空间)

    生成JS-SDK权限验证的签名 获取signature(签名)首先要获得 1.#获得jsapi_ticket 2.#获取当前页面的url #获取当前页面的url url="{}://{}{} ...