在SharePoint 2010中,如何找回丢失的服务账号(Service Account)密码
背景信息:
通常在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)密码的更多相关文章
- 关于SharePoint 2010中不能使用AjaxControlToolkit的解决办法
因为项目中有一个需求需要使用calendar控件,而且样式要和Reporting Service中的尽量一致,搜索了很久发现还是微软的AjaxControlToolkit提供的CalendarExte ...
- SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)
由于SharePoint 2013推出不久,并非所有的企业都会升级到SharePoint 2013的,毕竟升级不是打打补丁这么简单,更多的企业还是使用Sharepoint 2010版本的,因此本人自行 ...
- 在Sharepoint 2010中启用Session功能的说明文档
在Sharepoint 2010中启用Session功能的说明文档 开发环境:Windows 7系统,SharePoint Server 2010,Visual Studio 2010 按以下步骤进行 ...
- 在SharePoint 2010中创建网站的权限级别
转:http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能,使我们对权限的设置又提高了一个层 ...
- 在 SharePoint 2010 中访问数据
转:http://blog.banysky.net/?p=81001 数据访问的关键方法有哪些? | 使用查询类 | 使用 SPQuery | 使用 SPSiteDataQuery | 使用 LINQ ...
- 为SharePoint 2010中的FBA创建自定义登录页面
SharePoint 2010中默认的FBA登录页面非常简单,只提供了一个Asp.Net的Login控件,让用户输入用户名和密码.在大多数情况下,我们需要定制这个页面以满足一些安全需求,比如为登录页面 ...
- 在SharePoint 2010中部署RBS (转)
一.RBS(Remote BLOB Storage)简单介绍 在SharePoint的大部分企业应用案例中,SharePoint都是要承担着非常繁重的文件管理工作,这些文件类型包含了Word文档,Ex ...
- VSTO学习笔记(四)从SharePoint 2010中下载文件
原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...
- SharePoint 2010 中创建超链接到Pop-Up对话框
SharePoint 2010 中创建超链接到Pop-Up对话框 SharePoint 2010 推出了新式的带有阴影的弹出对话框,你感觉怎么样?我感觉倒是挺酷的.这样少打开了一个页面 ...
随机推荐
- js原声快速实现选项卡
var Rea = document.getElementById("rep"); var ReaAll = Rea.querySelectorAll("li" ...
- vmware下centos7桥接模式无法上网
前一段时间由于想给vm中的centos分配一个独立的IP,就将网络适配器的连接方式由NAT改为桥接,一切顺利. 今天再次开机,IP居然变成了192开头的局域网,并且ping不通外网,经过查找资料,解决 ...
- ***git自动化部署总结
在网上搜了一堆没用找到太仔细的教程,于是花费2天时间,自己研究了下.现在分享如下: 思路:利用crontab定时去去执行git pull脚本 首先,用git clone命令将中央库的代码下载到阿里云 ...
- Delphi的Trim函数
三个Trim函数简介 函数原型 function Trim(const S: string): string; 将字符串前后的空白及控制字元清掉. 注意Trim函数只能清掉字符串前后的空格及控制字元, ...
- 搭建高可用mongodb集群(四)—— 分片(经典)
转自:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 按照上一节中<搭建高可用mongodb集群(三)-- 深入副本集>搭建后还 ...
- 安装sqoop
安装sqoop 1.默认已经安装好java+hadoop 2.下载对应hadoop版本的sqoop版本 3.解压安装包 tar zxvf sqoop-1.4.6.bin__hadoop-2.0.4-a ...
- 使用GizwitsOpenAPI,快速开发轻应用
导读:使用机智云提供的Open API(Http / WebSocket),可以快速开发网页或微信应用等基于html的轻应用,用于管理和控制智能设备.机智云 Open API 主要帮助开发者通过 HT ...
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
java日期格式大全 format SimpleDateFormat(转) SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH ...
- Hackerrank11 LCS Returns 枚举+LCS
Given two strings, a and , b find and print the total number of ways to insert a character at any p ...
- DFS序+线段树+bitset CF 620E New Year Tree(圣诞树)
题目链接 题意: 一棵以1为根的树,树上每个节点有颜色标记(<=60),有两种操作: 1. 可以把某个节点的子树的节点(包括本身)都改成某种颜色 2. 查询某个节点的子树上(包括本身)有多少个不 ...