07查询AD角色拥有者和备份企业SQL数据库和日志

前一篇文章我们有效的利用powershell来查询和管理AD域的站点名称,这篇文章cantgis 将带给你的是关于如何查询自己所在域的角色拥有者和来使用powershell执行命令备份企业的SQL数据库和备份SQL日志文件。

这几个命令必须在powershell2.0以上才可以执行!
查询自己所在域的角色拥有者

普及知识AD(Active Directory) 中定义了五种FSMO(Flexible Single Master Operation)角色

  • Schema master(架构主控)

  • Domain naming master(域命名主控)

  • RID master(RID主控)

  • PDC master(PDC仿真器)

  • Infrastructure master(基础架构主控)


1.Schema Master
作用是修改活动目录的源数据。我们知道在活动目录里存在着各种各样的对像,比如用户、计算机、打印机等,这些对像有一系列的属性,活动目录本身就是一个数据库,对象和属性之间就好像表格一样存在着对应关系,那么这些对像和属性之间的关系是由谁来定义的,就是Schema Master,如果大家看过cantgis部署Exchange的话,就会知道Schema是可以被扩展的,但需要大家注意的是,扩展Schema一定是在Schema Master进行扩展的,在其它域控制器上或成员服务器上执行扩展程序,实际上是通过网络把数据传送到Schema上然后再在Schema Master上进行扩展的,要扩展Schema就必须具有Schema Admins组的权限才可以。

建议:在占有Schema Master的域控制器上不需要高性能,因为我们不是经常对Schema进行操作的,除非是经常会对Schema进行扩展,不过这种情况非常的少,但我们必须保证可用性,否则在安装Exchange或LCS之类的软件时会出错哦。

2.Domain Naming Master

这也是一个森林级别的角色,它的主要作用是管理森林中域的添加或者删除。如果你要在你现有森林中添加一个域或者删除一个域的话,那么就必须要和Domain Naming Master进行联系,如果Domain Naming Master处于Down机状态的话,你的添加和删除操作那上肯定会失败的。
建议:对占有Domain Naming Master的域控制器同样不需要高性能,我想没有一个网络管理员会经常在森林里添加或者删除域吧?当然高可用性是有必要的,否则就没有办法添加删除森里的域了。
3.PDC Emulator
在前面已经提过了,Windows 2000域开始,不再区分PDC还是BDC,但实际上有些操作则必须要由PDC来完成,那么这些操作在Windows 2000域里面怎么办呢?那就由PDC Emulator来完成,主要是以下操作:
⑴处理密码验证要求;
在默认情况下,Windows 2000域里的所有DC会每5分钟复制一次,但有一些情况是例外的,比如密码的修改,一般情况下,一旦密码被修改,会先被复制到PDC Emulator,然后由PDC Emulator触发一个即时更新,以保证密码的实时性,当然,实际上由于网络复制也是需要时间的,所以还是会存在一定的时间差,至于这个时间差是多少,则取决于你的网络规模和线路情况。
⑵统一域内的时间;
微软活动目录是用Kerberos协议来进行身份认证的,在默认情况下,验证方与被验证方之间的时间差不能超过5分钟,否则会被拒绝通过,微软这种设计主要是用来防止回放式攻击。所以在域内的时间必须是统一的,这个统一时间的工作就是由PDC Emulator来完成的。
⑶向域内的NT4 BDC提供复制数据源;
对于一些新建的网络,不大会存在Windows 2000域里包含NT4的BDC的现象,但是对于一些从NT4升级而来的Windows 2000域却很可能存有这种情况,这种情况下要向NT4 BDC复制,就需要PDC Emulator。
⑷统一修改组策略的模板;
⑸对Windows 2000以前的操作系统,如WIN98之类的计算机提供支持;
对于Windows 2000之前的操作系统,它们会认为自己加入的是NT4域,所以当这些机器加入到Windows 2000域时,它们会尝试联系PDC,而实际上PDC已经不存在了,所以PDC Emulator就会成为它们的联系对象!
建议:从上面的介绍里大家应该看出来了,PDC Emulator是FSMO五种角色里任务最重的,所以对于占用PDC Emulator的域控制器要保证高性能和高可用性。
4.RID Master
在Windows 2000的安全子系统中,用户的标识不取决于用户名,虽然我们在一些权限设置时用的是用户名,但实际上取决于安全主体SID,所以当两个用户的SID一样的时候,尽管他们的用户名可能不一样,但Windows的安全子系统中会把他们认为是同一个用户,这样就会产生安全问题。而在域内的用户安全SID=Domain SID+RID,那么如何避免这种情况?这就需要用到RID Master,RID Master的作用是:分配可用RID池给域内的DC和防止安全主体的SID重复。
建议:对于占有RID Master的域控制器,其实也没有必要一定要求高性能,因为我们很少会经常性的利用批处理或脚本向活动目录添加大量的用户。这个请大家视实际情况而定了,当然高可用性是必不可少的,否则就没有办法添加用户了。
5. Infrastructure Master
FSMO的五种角色中最无关紧要的可能就是这个角色了,它的主要作用就是用来更新组的成员列表,因为在活动目录中很有可能有一些用户从一个域(Domain)转移到另外一个域(Domain),那么用户的DN(DomainName)名就发生变化,这时其它域对于这个用户引用也要发生变化。这种变化就是由Infrastructure Master来完成的。

建议:其实在活动目录森林里仅仅只有一个域或者森林里所有的域控制器都是GC(全局编录)的情况下,Infrastructure Master根本不起作用,所以一般情况下对于占有Infrastructure Master的域控制器往忽略性能和可能性。


cantgis 对于这五个角色的理解
前两个条件:架构主控和域命名主控只能是一个森林角色。
其他三个:RID主控,PDC仿真器和基础设施主控是林中每个域的角色。每个域都有自己的RID主控,PDC仿真器和基础设施主控
同样我们使用 PowerShell AD模块也可以帮助我们得到我们想要得到的信息。
使用下面的代码我们当前用户就可以得到powershell林和域角色的拥有者

PS C:\Windows\system32> [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain() | Select-Object *owner
PS C:\Windows\system32> [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest() | Select-Object *owner





使用powershell执行命令备份企业的SQL数据库和备份SQL日志文件
如今我们可以再powershell中执行SQL数据库备份
当然我们必须要利用这个类:Microsoft.SqlServer.Management.Smo.Backup
让我们来看看如何实现吧
首先们运行下面的来发现服务器的对象(Object

Add-Type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
add-type -AssemblyName "Microsoft.SqlServer.SMOExtended, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
$server = New-Object Microsoft.SqlServer.Management.Smo.Server $env:ComputerName



我们知道了服务器对象(Object)后我们就可以执行下面的cmdlet命令来实现SQL备份。
我们选择的完全备份,最后输出的文件位于C盘的backup文件夹中.


$backup = New-Object Microsoft.SqlServer.Management.Smo.Backup -Property @{
   Action = [Microsoft.SqlServer.Management.Smo.BackupActionType]::Database
   BackupSetDescription = "Full backup of MyDB"
   BackupSetName = "MyDB backup set"
   Database = "MyDB"
   MediaDescription = "Disk"
}
$backup.Devices.AddDevice("C:\Backup\MyDB.bak", 'File')
$backup.SqlBackup($server)


好了下面cantgis 将继续讲一下如何利用powershell备份SQL事务日志
我们将使用SQL SMO备份日志, 枚举:BackupActionType 同样我们也可以使用上面备份数据库的值来备份日志
下面我们执行cmdlet

Add-Type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
Add-Type -AssemblyName "Microsoft.SqlServer.SMOExtended, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"
                                                   
$server = New-Object Microsoft.SqlServer.Management.Smo.Server $env:ComputerName
$backup = New-Object Microsoft.SqlServer.Management.Smo.Backup -Property @{
   Action = [Microsoft.SqlServer.Management.Smo.BackupActionType]::Log
   BackupSetDescription = "Transaction Log backup of MyDB"
   BackupSetName = "MyDB TLog backup set"
   Database = "MyDB"
   MediaDescription = "Disk"
}
                                                   
$backup.Devices.AddDevice("C:\Backup\MyDB-TLog.bak", 'File')



上面的代码中我主要说一下关于Action = [Microsoft.SqlServer.Management.Smo.BackupActionType]::Log
它是要定义一下:定义我们想要执行一个事务日志备份
好了,谢谢大家陪Cantgis 一起深入的进行powershell的使用。
请持续关注cantgis小屋


你可能感兴趣的:(windows,powershell)