背景信息:

通常在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. 上传文件 隐藏input type="file",用text显示

    <div> <span>上传文件:</span> <input type="file" id="upload_file" ...

  2. vs使用

    1.控制dll是否生成到本地,如图,右击dll,选择属性,设置复制到本地为true即可

  3. 网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2?

    p { margin-bottom: 0.1in; line-height: 120% } 网站开启https后加密协议始终是TLS1.0如何配置成TLS1.2? 要在服务器上开启 TLSv1.,通常 ...

  4. Microsoft Visual Studio 工程属性表props/vsprops创建与使用

    props/vsprops:工程属性表文件(project property sheet) 后者为vs2008的,前者为vs2010及以后版本的,其主要包含工程属性配置相关,可以单独提取出来供不同工程 ...

  5. vue-loader配合webpack的使用及安装

    vue-loader配合webpack的使用及安装: 工程文件简单的目录结构 index.html main.js   入口文件 App.vue   vue文件,官方推荐命名法 package.jso ...

  6. jQuery简单入门

    jQuery是什么 John Resig在2006年1月发布的一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作为什么要使用jQuery (1)write less do ...

  7. 【多线程】java多线程 测试例子 详解wait() sleep() notify() start() join()方法 等

    java实现多线程,有两种方法: 1>实现多线程,继承Thread,资源不能共享 2>实现多线程  实现Runnable接口,可以实现资源共享 *wait()方法 在哪个线程中调用 则当前 ...

  8. nodejs复习04

    TCP/UDP网络应用 创建TCP服务器客户端 socket套接字对象实例,是对TCP协议的一个基本封装接口 clientt套接字对象实例 //server.js var net = require( ...

  9. 返水bug-霸世

    NOOK(N) CSBFB(25) off(Y) QQ(2652880032) G(1) off1(Y) QQ1(3479301404) G1(1) off2(Y) QQ2(309235846) G2 ...

  10. 解决Ubuntu安装openssh-server依赖问题

    sudo apt-get install openssh-server 提示:openssh-server : 依赖: openssh-client (= 1:6.6p1-2ubuntu1) 解决 u ...