none
[原創][分享]自動備份 Active Directory 的 System State 核心文件的批處理脚本 RRS feed

  • 常规讨论

  • 此脚本備份的方法依據之前發佈的

    [原創][分享]如何將基於 Windows Server 2008 R2 完整安裝的林根域通過不使用 System State 恢復來實施 Active Directory Disaster Recovery 到不同硬件配置的機器
    http://social.technet.microsoft.com/Forums/zh-CN/33d0a9af-fcb8-45c3-9bfa-e9727d26ab83/-windows-server-2008-r2-system-state-active-directory-disaster?forum=windowsserversystemzhchs&prof=required

    實現。

    此脚本備份方法請參見代碼,這裡僅就部分代碼實現加以説明。

    1. 在針對 ntdsutil 以批處理方式執行的代碼中,使用完整單詞,而不是單詞首字母縮寫。以便於知曉具體命令。

    2. 在本脚本之前提供的半自動備份 System State

    baksysst.bat

    在獲取通過 ntdsutil 挂載在系統卷的快照目錄存在一定問題。

    set snap=
    for /f "tokens=*" %%n in ('dir %sysdrv%:\ /ad/b ^| findstr /r/i/c:"^$SNAP_[0-9]*_VOLUME[A-Z]\$$" 2^> nul') do (
     set snap=%%n
    )
    if not defined snap (goto errDev)

    如果系統卷根目錄同時存在多個符合該命名格式的子目錄,上面的代碼可能會找錯子目錄。其次在通過 ntdsutil snapshot mount 命令挂載時,是可以在挂載一個快照後,再次建快照,並能再次挂載。新的代碼改爲直接從 ntdsutil 輸出結果獲取。

    再卸載快照時,處於細分步驟考慮,使用了

    ntdsutil snapshot "unmount %snapshot%" "delete %snapshot%" quit quit

    實際上祇需要 delete 就可以,程序自己會先 unmount 然後 delete 快照。

    以下爲完整代碼

    @echo off
    
    echo.
    echo 自动备份 System State 核心文件
    
    set root=%cd%
    
    pushd %cd%
    echo.
    echo 获取用于存储备份的模板 VHD 文件完全限定路径
    set vhd=%1
    if not defined vhd (goto notArg)
    
    for /f "tokens=*" %%n in ('echo %1') do (
    	set vhd=%%~fn
    )
    
    dir "%vhd%" /a-d/b 2> nul 1> nul
    if %errorlevel% neq 0 (goto errPath)
    
    echo.
    echo 获取用于创建备份的临时目录
    set tmpDir=%2
    if not defined tmpDir (goto errTempDir)
    
    for /f "tokens=*" %%n in ('echo %tmpDir%') do (
    	set tmpDir=%%~fn
    )
    
    dir "%tmpDir%" /ad/b 2> nul 1> nul
    if %errorlevel% neq 0 (goto errPath)
    
    echo.
    echo 设置虚拟磁盘卷标
    set sysLabel=%3
    if not defined sysLabel (goto errLabel)
    for /f "tokens=*" %%n in ('echo %sysLabel%') do set sysLabel=%%~n
    
    echo.
    echo 设置虚拟磁盘大小
    set spaceSize=%4
    if not defined spaceSize (goto errSize)
    for /f "tokens=*" %%n in ('echo %spaceSize%') do set spaceSize=%%~n
    
    set vhdEntry=%tmpDir%\%random%_%random%_%random%_%random%
    set vhdScript=%vhdEntry%.txt
    set vhdTemp=%vhdEntry%.vhd
    
    echo.
    echo 复制模板 VHD 文件
    echo create vdisk file="%vhdTemp%" source="%vhd%" type=expandable > "%vhdScript%"
    diskpart -s "%vhdScript%" > nul
    if %errorlevel% neq 0 (goto errCopying)
    
    echo.
    echo 开始挂载 VHD
    echo select vdisk file="%vhdTemp%" > "%vhdScript%"
    echo attach vdisk >> "%vhdScript%"
    
    diskpart -s "%vhdScript%" > nul
    if %errorlevel% neq 0 (goto errMounting)
    
    echo.
    echo 创建挂载用临时目录
    mkdir "%vhdEntry%"
    if %errorlevel% neq 0 (goto errDir)
    
    echo.
    echo 挂载虚拟磁盘到临时目录
    echo list volume > "%vhdScript%"
    
    timeout -t 5 -nobreak > nul
    
    set volumeId=
    for /f "tokens=2" %%n in ('diskpart -s "%vhdScript%" ^| find /i "%sysLabel%" ^| find "%spaceSize%"') do (
    	set volumeId=%%n
    )
    
    if not defined volumeId (goto errVol) 
    
    echo select volume %volumeId% > "%vhdScript%"
    echo assign mount="%vhdEntry%"  >> "%vhdScript%"
    
    diskpart -s "%vhdScript%" > nul
    
    echo.
    echo 成功挂载虚拟磁盘到临时目录 "%vhdEntry%"
    
    echo.
    echo 创建 Active Directory 实例 NTDS 快照
    
    for /f "tokens=2 delims={" %%n in ('ntdsutil "activate instance ntds" snapshot create quit quit ^| find "{"') do (
    	for /f "tokens=1 delims=}" %%m in ('echo %%n') do set snapshot={%%m}
    )
    
    if not defined snapshot (goto errSnapshot)
    
    echo 成功获取快照 %snapshot%
    echo 挂载此快照
    
    ntdsutil snapshot "mount %snapshot%" quit quit > "%vhdScript%"
    find ":" "%vhdScript%" > nul
    if %errorlevel% neq 0 (goto errSysMounting)
    
    echo 获取通过 ntdsutil 挂载的快照目录
    set snap=
    for /f "tokens=2 delims=$" %%n in ('find "$" "%vhdScript%"') do set snap=$%%n$
    if not defined snap (goto errDev)
    
    popd
    
    pushd %cd%
    
    echo.
    echo 为备份进行准备
    
    REM Merge
    
    echo 使用机器名在目标磁盘创建存放目录
    for /f "tokens=*" %%h in ('hostname') do set folder=%%h
    mkdir "%vhdEntry%\%folder%"
    dir "%vhdEntry%\%folder%" /ad/b 2> nul 1> nul
    if %errorlevel% neq 0 (goto errPath)
    
    echo 切换到该目录
    cd /d "%vhdEntry%\%folder%"
    if %errorlevel% neq 0 (goto errPath)
    
    echo 获取系统磁盘盘符
    set sysdrv=
    set sysdrv=%systemdrive:~0,1%
    if not defined sysdrv (goto notArg)
    echo %sysdrv% | findstr /r/c:"[A-Z]" 2> nul 1> nul
    if %errorlevel% neq 0 (goto errData)
    
    echo 设置日志文件名
    set logFile=%random%_%random%_%random%_%random%.log
    
    echo.
    echo 系统盘符 %sysdrv%:
    echo 存储目录 %vhdEntry%\%folder%
    echo 快照 %snapshot%
    echo 快照名   %snap%
    echo 日志文件 %logFile%
    echo.
    
    echo 开始备份
    
    robocopy %sysdrv%:\%snap%\Windows\NTDS NTDS -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%
    robocopy %sysdrv%:\%snap%\Windows\SYSVOL SYSVOL -copyall -dcopy:t -xjd -s -e -np -r:0 -w:0 >> %logFile%
    xcopy /hrk %sysdrv%:\%snap%\Windows\link.txt >> %logFile%
    dism -online -get-features -format:table > features.txt
    attrib features.txt +r >> %logFile%
    robocopy %sysdrv%:\%snap%\Windows\system32\dns dns -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%
    robocopy %sysdrv%:\%snap%\Windows\system32\config config -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%
    attrib %logFile% +r
    
    echo.
    echo 备份完成,详情请参见日志文件。
    
    echo.
    echo 卸载和删除 NTDS 实例快照 %snapshot%
    ntdsutil snapshot "unmount %snapshot%" "delete %snapshot%" quit quit
    
    echo.
    echo 卸载虚拟磁盘
    
    echo select vdisk file="%vhdTemp%" > "%vhdScript%"
    echo detach vdisk >> "%vhdScript%"
    
    diskpart -s "%vhdScript%" > nul
    if %errorlevel% neq 0 (goto errUnmounting)
    
    popd
    
    echo. 删除挂载目录 "%vhdEntry%"
    rmdir "%vhdEntry%" 2> nul
    
    del "%vhdScript%" /a/f/q 2> nul
    
    goto exit
    
    :notArg
    echo.
    echo copyright 2013 repl
    echo 依据在 URL: http://social.technet.microsoft.com/Forums/zh-CN/
    echo 33d0a9af-fcb8-45c3-9bfa-e9727d26ab83/
    echo -windows-server-2008-r2-system-state-active-directory-disaster
    echo ?forum=windowsserversystemzhchs
    echo 发表的原创文章,自动备份 System State 核心文件的批处理脚本。
    echo 在进行备份前需要创建一个足够大的已格式化为 NTFS 的 VHD 文件作为存储模板。
    echo 处于备份可靠的考虑,不建议使用差分方式备份,而是以模板为源创建一个副本。
    echo 模板 VHD 必须设置作为唯一标识的卷标。
    echo 同时必须提供由 diskpart list volume 命令返回的容量大小。
    echo 此脚本需要这两个参数来确定挂载的虚拟磁盘。
    echo.
    echo useage: auto_backup_system_state templateVHD tempDir label size
    echo		templateVHD 作为模板的 VHD 完全限定路径。
    echo		tempDir	备份文件所需的临时目录完全限定路径。
    echo		label	通过 diskpart list volume 命令返回的虚拟磁盘卷标。
    echo		size	通过 diskpart list volume 命令返回的虚拟磁盘容量大小,
    echo 		不包含单位。
    net helpmsg 87
    popd
    exit /b 87
    
    :errTempDir
    net helpmsg 29
    popd
    exit /b 29
    
    :errLabel
    net helpmsg 12
    popd
    exit /b 12
    
    :errSize
    net helpmsg 14
    popd
    exit /b 14
    
    :errData
    net helpmsg 13
    popd
    exit /b 13
    
    :errPath
    net helpmsg 3
    popd
    exit /b 3
    
    :errDev
    net helpmsg 20
    popd
    exit /b 20
    
    :errCopying
    net helpmsg 8
    popd
    exit /b 8
    
    :errMounting
    net helpmsg 22
    popd
    exit /b 22
    
    :errDir
    net helpmsg 1
    popd
    exit /b 1
    
    :errVol
    net helpmsg 6
    popd
    exit /b 6
    
    :errSnapshot
    net helpmsg 24
    popd
    exit /b 24
    
    :errSysMounting
    net helpmsg 26
    popd
    exit /b 26
    
    :errUnmounting
    net helpmsg 31
    popd
    exit /b 31
    
    :exit
    net helpmsg 0
    cd /d "%root%"
    exit /b 0

    以上爲完整代碼


    Folding@Home



    • 已编辑 repl 2013年12月22日 15:11 對標題描述進行修改
    2013年12月22日 4:49

全部回复

  • 本文也在

    http://bbs.winos.cn/viewthread.php?tid=136452&extra=

    發表。


    Folding@Home

    2013年12月22日 5:50
  • 感谢分享!


    Jeremy Wu

    TechNet Community Support

    2013年12月23日 16:44
    版主
  • 添加備份 Active Directory 集成 DNS 設置的代碼。

    備份代碼添加到

    echo 开始备份

    robocopy %sysdrv%:\%snap%\Windows\NTDS NTDS -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%

    之間

    以下爲要添加的代碼

    set zone=%vhdEntry%\%folder%\%random%_%random%_%random%_%random%_%folder%_dns_zones\zones
    mkdir "%zone%"
    dnscmd . /exportsettings >> %logFile%
    move C:\Windows\system32\dns\DnsSettings.txt "%zone%\..\" >> %logFile%
    dnscmd . /enumzones > "%zone%\..\enumzones.txt"
    for /f "tokens=1" %%n in ('dnscmd . /enumzones ^| findstr /r/i/c:".*primary.*ad-.*" 2^> nul') do (
    	dnscmd . /zoneexport %%n %%n.dns >> %logFile%
    	move C:\Windows\system32\dns\%%n.dns "%zone%" >> %logFile%
    )
    attrib "%zone%\*" +r

    以上爲要添加的代碼


    Folding@Home

    2013年12月28日 8:18
  • 時隔三年, 這裏再補充備份與 DC 集成在一起的 CA 的代碼. 代碼可以添加備份 DNS 後

    echo 备份 CA
    echo 部分命令参考自
    echo https://blogs.technet.microsoft.com/pki/2010/04/20/disaster-recovery-procedures-for-active-directory-certificate-services-adcs/
    certutil -p "PASS-PHASE" -backup "%vhdEntry%\%folder%\cert"
    reg export HKLM\SYSTEM\CurrentControlSet\services\certsvc "%vhdEntry%\%folder%\cert\certsvc.conf"
    certutil -getreg CA\CSP > "%vhdEntry%\%folder%\cert\CSP.txt"
    certutil -catemplates > "%vhdEntry%\%folder%\cert\CATemplates.txt"
    robocopy %sysdrv%:\%snap%\Windows\system32\CertLog "%vhdEntry%\%folder%\cert\CertLog" -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%
    robocopy %sysdrv%:\%snap%\Windows\system32\certsrv "%vhdEntry%\%folder%\cert\certsrv" -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%
    robocopy %sysdrv%:\%snap%\ProgramData\Microsoft\Crypto "%vhdEntry%\%folder%\cert\Crypto" -copyall -dcopy:t -s -e -np -r:0 -w:0 >> %logFile%
    

    說明:
    1. 這個方法並沒有經過非常充分的測試, 但從目前的情況, 確實實現了 CA 在不同物理機(計算機名相同)的還原.
    2. 這裏假設該 CA 集成在具有 5 個 FSMO 角色的 DC 上. 同時該 DC 已經完全損毀, 整個 Active Directory 
        已經用這個腳本生成的備份還原, 但 CA 尚未還原. 
    3. 在完成 FSMO 角色轉移後, 將該 DC 的信息從 DC 和 DNS 完全刪除.
    4. 在新機器重新安裝一樣的系統(功能版本一致), 機器名相同, IP 也一樣.
    5. 然後只啓動如下功能, 

    CertificateServicesManagementTools
    CertificateServices
    NetFx3

    6. 通過管理員權限執行命令

    reg import certsvc.conf

    還原服務設置, 這裏假設已經定位到備份目錄.

    7. 用命令

    robocopy CertLog C:\Windows\system32\CertLog -copyall -dcopy:t -s -e
    robocopy certsrv C:\Windows\system32\certsrv -copyall -dcopy:t -s -e

    還原所需目錄和文件.
    8. 因爲是通過導入註冊表文件實現恢復 

    certsvc 

    服務. 所以需要重啓機器, 來生效.

    9. 重新啓動, 並登錄桌面後, 應該可以看到服務

    certsvc

    已經順利啓動.
    10. 通過 msc 控制臺

    certsrv.msc

    或命令

    certutil -restorekey FILE_PATH

    還原私鑰. 至於是否需要重啓服務, 依據提示. 至於是否可以通過替換之前備份的 

    Crypto 

    目錄進行還原, 並沒有測試, 這裏備份僅僅是參照那篇 Blog 文章.
    11. 因爲測試緣故沒有啓用 http 部分的分發, 所以需要禁用 http 部分, 或者自行啓用.
    12. 如果爲了穩妥起見, 可以在臨時停用 CA 後, 來備份相關配置和文件. 備份完成後, 重新啓動服務.
    13. 方法粗糙卻有用, 不過風險自擔.


    Folding@Home

    2017年2月4日 6:58
  • 這裏在補充一個來自與自我備注中, 關於恢復同時具有 DC 和 CA 角色步驟的說明.

    因爲整體回復步驟, 與最初發表的差別不大, 所以這裏只貼出 CA 部分的.

    本文章也發表在 51CTO 的 BBS 論壇.

    以下爲正文

    57. 如果當初那臺還原的 DC 同時承載企業 CA 的話, 下面將介紹, 如何恢復企業 CA.
    58. 假設之前那臺 DC01 同時承載企業 CA 服務, 現在安裝一臺計算機名和 IP 完全一樣, 以及系統版本完全的系統.
        将該主機配置爲額外 DC 的具體操作步驟同前, 不再贅述.
    59. 當成功成爲 DC 後, 通過 dism 啓用如下角色

        dism -online -enable-feature -featurename:CertificateServices -featurename:CertificateServicesManagementTools 

        使之也成爲 CA 服務器.
        因爲從測試方便的角度出發, 所以沒有啓用針對 CA 的 Web 發佈部分,
        缺失的部分, 請自行補充.
    60. 這裏假設將 DC01 重新作爲額外 DC 的操作已經完成, 但不需要 DC01 扮演任何 FSMO 角色.
    61. 現在開始恢復此臺 DC 的 CA 服務.
        首先恢復本地組的權限
        在以管理員權限的 cmd, 執行命令

        net localgroup "Cert Publishers"

        如果返回的結果, 有無 DC01$, 沒有, 則

        net localgroup "Cert Publishers" /add DC01$

        對於

        net localgroup "Certificate Service DCOM Access"

        是否存在如下組

        NT AUTHORITY\Authenticated Users

        不存在, 則添加.

        對於

        net localgroup "CERTSVC_DCOM_ACCESS"

        是否存在如下組

        Domain Computers
        Domain Controllers
        Domain Users

        不存在, 則添加.
    62. 接着恢復 DCOM 分佈式組件的權限
        執行

        dcomcnfg

        然後定位到

        組件服務 - 計算機 - 我的電腦

        中的 "屬性".

        在其 COM 安全設置, 在其 "訪問權限"
        通過 "編輯限制(L)..." 按鈕, 在點卡的窗體中
        按 "添加(D)..." 按鈕
        在打開的窗體中, 按 "對象類型(O)..." 按鈕
        確保只勾選 "內置安全主體" 和 "組" 的複選框, 並按 "確定" 按鈕.
        然後 "對象名稱" 文本框中, 輸入

        Certificate Service DCOM Access

        按 "確定" 按鈕, 關閉窗體.
        然後在下方的複選框, 勾選針對該內置安全主體的 "允許" 本地和遠程訪問複選框.
        然後對內置組

        CERTSVC_DCOM_ACCESS

        重複相同步驟.

        對於 "啓動和激活" 權限, 仿造上述步驟, 對

        Certificate Service DCOM Access
        CERTSVC_DCOM_ACCESS

        只勾選 "允許" 本地和遠程激活 複選框. 注意是只有這兩個權限.
        上述恢復步驟參考自: 
        https://blogs.technet.microsoft.com/askds/2007/11/06/how-to-troubleshoot-certificate-enrollment-in-the-mmc-certificate-snap-in/
    63. 現在先恢復 CA 目錄.
        將那個存放 Active Directory 核心文件的 VHD 虛擬硬盤掛載.
        掛載方法見文章前部描述.
        然後以管理員身份在 cmd 執行命令

        robocopy E:\dc01\cert C:\misc\cert -copyall -dcopy:t -s -e

        此處假設其卷標爲 E:.
        然後執行

        echo certsrv c:\Windows\system32\certsrv -copyall -dcopy:t -s -e -l

        確認參數無誤後, 通過方向鍵, 修改上條命令中的

        echo

        爲

        robocopy

        並去掉末尾的

        -l

        再重新執行. 因爲這是複製到系統核心目錄的, 所以要小心行事.
        同理複製

        CertLog

        命令如下

        echo CertLog C:\Windows\system32\CertLog -copyall -dcopy:t -s -e -l

        注意雖然 Windows 默認不區分文件或目錄大小寫, 但是還是建議目錄名按照原有字母大小來.
        接着還原當前目錄中

        Crypto\Keys

        裏的文件到

        C:\ProgramData\Microsoft\Crypto\Keyso

        命令

        robocopy . C:\ProgramData\Microsoft\Crypto\Keys -copyall  

    64. 現在開始恢復 CA 服務配置.
        首先導出現有 CA 服務配置

        reg export HKLM\SYSTEM\CurrentControlSet\services\certsvc new_certsvc
        attrib new_certsvc +r

        這裏備份一份完整的當前 certsvc 服務配置, 以備不時之需.
        接着執行

        copy certsvc.conf old_certsvc

        複製一份原 certsvc 服務, 因爲需要從中進行修改.
        執行

        type new_certsvc | find "["

        記錄下, 返回的註冊表項名稱.
        因爲尚未運行該服務, 所以應該只有兩項.

        [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\certsvc]
        [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\certsvc\Performance]


        排除掉

        [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\certsvc]

        現在執行

        notepad old_certsvc

        找到之前命令返回的註冊表項後, 刪除這些項, 以及其下面的配置或子項.
        查找時去掉, 最右側的 ], 以防止漏配子項.
        確認修改完成後, 保存更改. 並執行命令

        reg import old_certsvc
     
    65. 然後恢復 Active Directory 全局設置的權限.
        基於 SDDL 安全描述定義語言的 ACL 訪問控制列表, 在微軟的產品中大量使用.
        除了常見的文件系統權限, 註冊表權限外, 還有進程實例, Active Directory 對象這些也大量依賴於 ACL
        實現權限限制.
        但是由於 GUI 界面可能存在不能全部列出其權限組合, 導致直接經過 GUI 重置權限, 不能達到預期目的,
        所以這裏爲了穩妥起見, 採用命令行方式, 對權限所有者進行替換, 而不改動原有權限設置.
        如果一定要在 GUI 中進行更改, 請使用

        adsiedit.msc 

        在 cmd 中執行命令

        powershell

        啓動 PowerShell, 然後開始執行如下 cmdlet 命令

        $root = [adsisearcher]'LDAP://RootDSE'
        $root.searchroot = 'LDAP://CN=Public Key Services,CN=Services,CN=Configuration,DC=contoso,DC=com'
        $root.filter='CN=*'
        $all =  $root.findall()
        
        $rid = '-2013\)'
        foreach ($obj in $all)
        {
        # "AD: $($obj.path)"
        $e = $obj.getdirectoryentry()
        if ($e.objectsecurity.sddl -match $rid) {write-host $($e.path)}
        $e.psbase.Dispose()
        }

        其中 rid 裏的 2013 爲原 DC01 的 RID, 這裏爲舉例說明, 請更改爲實際值.
        這些命令用以找出在存儲 CA 設置的區域中, 有哪些 Active Directory 對象實例的 SDDL, 
        其中的安全設置所有者是原 DC01.
     
        至於如何複製執行, 在啓用 cmd 的 "快速編輯" 功能後,
        複製已經經過實際情況改變後的代碼, 按

        Alt+ Space, 按 E, P 鍵粘貼代碼, 最後按 Enter 執行.

        當然也可以通過使用鼠標單擊菜單項進行複製. 
        將返回的以

        LDAP://

        打頭的地址複製出來.
        並逐一將該地址替換下面代碼中的 LDAP_URL

        $dn = new-object system.directoryservices.directoryentry
        $dn.path = 'LDAP_URL'
        $dn.objectsecurity.sddl
        $dn.objectsecurity.sddl -replace '\)', ")`r`n" | clip

        上述命令中, 第三條是依原樣在屏幕上顯示該 DS 對象的 SDDL 定義.
        緊接着的命令是將 SDDL 依每個 ')' 符號, 替換爲 ')' 後面帶 CRLF, 也即一對由 () 括起來的安全設置定義佔一行, 並其複製到剪貼板
        這樣方便在記事本中修改
        這是一個內容示例

        O:EAG:EAD:AI(A;OICI;LCRPLORC;;;AU)
        (A;OICI;CCDCLCSWRPWPDTLOSDRCWDWO;;;EA)
        (A;OICI;CCDCLCSWRPWPDTLOSDRCWDWO;;;S-1-5-21-AAAAAAAAAA-BBBBBBBBB-CCCCCCCCC-2013)
        (OA;;CR;0e10c968-78fb-11d2-90d4-00c04f79dc55;;AU)
        (A;CIID;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;EA)
        (A;CIID;CCLCSWRPWPLOCRSDRCWDWO;;;DA)

        可以看到其中一行存在 

        S-1-5-21-AAA...CCC-2013

        這樣的字符串. 這就是原 DC01$ 的安全設置定義.
        現在我們需要做的是, 將其最後的 2013 替換爲現在這個新 DC01$ 的 RID.
        RID 2013 是舉例說明.
        獲取方法

        dsquery * -filter "samaccountname=DC01$" -attr objectsid

        修改完成後, 將這些定義拼成一行, 並複製到剪貼板中.
        然後在 PowerShell 中執行命令

        $dn.ObjectSecurity.SetSecurityDescriptorSddlForm('SDDL')

        其中 SDDL 即爲拼接後的字符串
        當執行沒有報錯, 則最後執行

        $dn.psbase.CommitChanges()
        $dn.psbase.Dispose()

        完成更改, 且釋放對象實例.
        最後逐一將所有 LDAP_URL 都這樣更改.
    66. 這些都修改完成後, 就可以重啓 DC01. 
    67. 登錄到桌面後, 以管理員權限運行 cmd
        並執行命令

        certutil -config DC01\contoso-DC01-CA -restorekey c:\cert

        上述命令是將存放在

        C:\cert

        目錄裏的名爲

        contoso-DC01-CA.p12

        文件存儲的密鑰.
        這些目錄和文件, 依據實際情況進行替換.
    68. 最後執行命令

        sc start certsvc

        啓動 CA 服務.
        可以通過

        sc query certsvc

        查詢服務是否已經運行.     


    以上爲正文


    Folding@Home

    2017年4月21日 12:32