伺服器組建 DVD Visual Basic 指令碼範例

 

適用版本: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1

上次修改主題的時間: 2008-07-24

本主題提供的範例 Visual Basic 指令碼,可作為建立指令碼檔案的起點,製作組建 DVD 以改善伺服器組建處理程序需要該指令碼檔案。您可以修改下列程序,為組織建立必要的指令碼。

下列範例指令碼必須進行修改,才能在您的特定環境中運作。這些指令碼可協助您自動化許多在環境中部署 Exchange 伺服器所需的步驟。

範例 Visual Basic 指令碼

important重要事項:
這些指令碼範例說明如何實作自動化步驟。您必須加以修改,以讓指令碼適合您的環境。您必須在實驗室環境中進行各項測試,之後才能嘗試在生產環境中加以運用。

開始之前

若要執行下列程序,您使用的帳戶必須是本機 Administrators 群組的成員。

如需管理 Exchange 2007 所需之權限、委派角色及權利的相關資訊,請參閱權限考量

LegacyEAS.vbs

程序

使用記事本建立 Visual Basic 指令碼,啟用 Exchange 2003 伺服器 (位於定義的系統管理群組內) 之 /Microsoft-Server-Activesync 虛擬目錄的 Windows 整合式驗證和基本驗證

  1. 開啟記事本或其他文字編輯器。

  2. 將下列程式碼複製到檔案中,並將此檔案以描述性名稱與 .bat 副檔名加以儲存。建議您將檔案命名為 legacyEAS.vbs

    #"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    #"!!!!!!!  THIS IS NOT A MICROSOFT SUPPORTED SCRIPT.  !!!!!!!!"
    #"!!!!!!!      TEST IN A LAB FOR DESIRED OUTCOME      !!!!!!!!"
    #"!!!!!!!                          !!!!!!!!!!"
    #"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    #" "
    '=======================================
    'legacyEAS.vbs
    '
    'Copyright (c) 2007, Microsoft Corporation.  All Rights Reserved.
    '
    'THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
    'KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    'IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    'PARTICULAR PURPOSE.
    '
    '   Description: This script will enable Windows Integrated Authentication and Basic Authentication
    '                on the /Microsoft-Server-Activesync virtual directory on Exchange 2003 servers
    '                within in a defined administrative group.
    '
    'Written by: Ross Smith IV (Microsoft)
    '
    'Version: 1.3
    'Last Updated: 2/26/06
    '=======================================
    
    
    '=====================================================
    'Define Variables & Constants
    '=====================================================
    Option Explicit
    
    Dim oArg, cnADQuery, cmEASQuery, cmOrgQuery, rsOrgDN, rsEAS, oRootDSE, strConfigurationNC, objContainer
    Dim strAGName, strAttValue, strAttribute, strDomainController, strEASDN, strLDAPPath, strLDAPCNC, strOrgDN, strLDAPSDN
    Dim i, strRemoveVal
    
    Const ADS_SCOPE_BASE = 0
    Const ADS_SCOPE_ONELEVEL = 1
    Const ADS_SCOPE_SUBTREE = 2
    Const ADS_PROPERTY_CLEAR = 1
    Const ADS_PROPERTY_UPDATE = 2
    Const ADS_PROPERTY_APPEND = 3
    Const ADS_PROPERTY_DELETE = 4
    
    '=====================================================
    'Determine if CSCRIPT must be used
    '=====================================================
    if InStr(1,wscript.fullname,"cscript.exe",1) = 0 then
    wscript.echo "This script should be run using 'cscript.exe <scriptfile>'.  Terminating script."
    wscript.quit
    end if
    
    '=====================================================
    ' Clear and set string variables
    '=====================================================
    strAGName = ""
    strDomainController = ""
    strLDAPCNC = ""
    strLDAPSDN = ""
    strOrgDN = ""
    strEASDN = ""
    strConfigurationNC = ""
    
    strAttribute = "msExchAuthenticationFlags"
    strAttValue = "6"
    
    '=====================================================
    ' Parse command-line arguments
    '=====================================================
    Set oArg = wscript.arguments
    if oArg.Count = 0 then  ' we need the arguments
    DisplayHelpMessage
    wscript.quit
    End If
    
    For i = 0 to oArg.Count - 1
    
    'Get Domain Contoller value
    If LCase(Left(oArg.Item(i),3)) = "-d:" then
    strDomainController = Mid(oArg.Item(i),4)
    'wscript.echo strDomainController 
    end if
    
    'Get Administrative Group Name value
    If LCase(Left(oArg.Item(i),3)) = "-a:" then
    strAGName = Mid(oArg.Item(i),4)
    'wscript.echo strAGName
    end if
    
    Next
    
    '=====================================================
    ' Make sure AG argument has been passed
    '=====================================================
    If strAGName = "" then
    wscript.echo "A valid Administrative Group argument was not passed!"
    wscript.quit
    end if
    
    '=====================================================
    ' Determine if Domain Controller argument was passed
    '=====================================================
    If strDomainController <> "" then
    strLDAPPath = "LDAP://" & strDomainController & "/"
    else
    strLDAPPath = "LDAP://"
    end if
    
    '=====================================================
    ' Initialize any objects that need initialization
    '=====================================================
    Set cnADQuery = CreateObject("ADODB.Connection")
    Set cmEASQuery = CreateObject("ADODB.Command")
    Set cmOrgQuery = CreateObject("ADODB.Command")
    
    '=====================================================
    ' Open the connection
    '=====================================================
    cnADQuery.Provider = "ADsDSOObject"  ' This is the ADSI OLE-DB provider name
    cnADQuery.Open "Active Directory Provider"
    
    '=====================================================
    ' Create command objects for this connection
    '=====================================================
    Set cmOrgQuery.ActiveConnection = cnADQuery
    Set cmEASQuery.ActiveConnection = cnADQuery
    
    '=====================================================
    ' Get Configuration Naming Context & Build LDAP Path
    '=====================================================
    Set oRootDSE = GetObject(strLDAPPath & "RootDSE")
    strConfigurationNC = oRootDSE.Get("configurationNamingContext")
    'wscript.echo strConfigurationNC 
    
    strLDAPCNC = strLDAPPath & strConfigurationNC
    
    '=====================================================
    ' Compose Search string & set search order 
    ' for Exchange Organization Search
    '=====================================================
    cmOrgQuery.CommandText = "select distinguishedName from '" & strLDAPCNC & "' where objectCategory = 'msExchOrganizationContainer'"
    cmOrgQuery.Properties("searchscope") = ADS_SCOPE_SUBTREE
    
    'Verification of CommandText
    'wscript.echo "cmOrgQuery = " & cmOrgQuery.CommandText
    
    '=====================================================
    ' Execute & Navigate Server Query
    '=====================================================
    Set rsOrgDN = cmOrgQuery.Execute
    
    if Err.Number <> 0 then
    wscript.echo "Could not locate the organization container!"
    wscript.quit
    end if
    
    while not rsOrgDN.EOF
    'wscript.echo rsOrgDN.Fields("distinguishedName").value
    strOrgDN = rsOrgDN.Fields("distinguishedName").value
    rsOrgDN.MoveNext
    wend
    
    '=====================================================
    ' Compose Search string & set search order 
    ' for EAS vdir Search
    '=====================================================
    If strOrgDN = "" then
    wscript.echo "Could not locate the organization container!"
    wscript.quit
    else 
    strLDAPSDN = strLDAPPath & "cn=" & strAGName & ",cn=Administrative Groups," & strOrgDN
    end if
    
    cmEASQuery.CommandText = "select name, distinguishedName from '" & strLDAPSDN & "' where cn = 'Microsoft-Server-Activesync'"
    cmEASQuery.Properties("searchscope") = ADS_SCOPE_SUBTREE
    
    'Verification of CommandText
    'wscript.echo "cmEASQuery = " & cmEASQuery.CommandText
    
    '=====================================================
    ' Execute & Navigate SG Query
    '=====================================================
    Set rsEAS = cmEASQuery.Execute
    
    if Err.Number <> 0 then
    wscript.echo "The failed query was..."
    wscript.echo cmEASQuery.CommandText
    wscript.quit
    end if
    
    while not rsEAS.EOF
    
    'wscript.echo rsEAS.Fields("distinguishedName").value
    'wscript.echo rsEAS.Fields("name").value
    
    strEASDN = rsEAS.Fields("distinguishedName").value
    
    Set objContainer = GetObject(strLDAPPath & strEASDN)
    
    objContainer.Put strAttribute, strAttValue
    objContainer.SetInfo
    
    wscript.echo "Exchange Server Container DN - " & strEASDN
    wscript.echo "Attribute Name & Value - " & strAttribute & ": " & strAttValue
    wscript.echo "Attribute set!!" 
    wscript.echo ""
    
    strEASDN = ""
    rsEAS.MoveNext
    wend
    
    '=====================================================
    ' Closing & Clearing Connections
    '=====================================================
    rsEAS.Close
    Set rsEAS = Nothing
    rsOrgDN.close
    Set rsOrgDN = Nothing
    cnADQuery.Close
    Set cnADQuery = Nothing
    
    '=====================================================
    ' Help Listing
    '=====================================================
    Sub DisplayHelpMessage()
    wscript.echo "Description: This script will enable Windows Integrated Authentication and Basic Authentication"
    wscript.echo "             on the /Microsoft-Server-Activesync virtual directory on Exchange 2003 servers"
    wscript.echo "             within in a defined administrative group."
    wscript.echo ""
    wscript.echo "Usage: legacyEAS.vbs -a:<AdministrativeGroupName> [-d:<DomainController>]"
    wscript.echo ""
    wscript.echo "Required Arguments:"
    wscript.echo ""
    wscript.echo "-a:<AdministrativeGroupName>"
    wscript.echo "Specify legacy Exchange Administrative Group Name"     
    wscript.echo "Ex: NorthAmerica"
    wscript.echo ""
    wscript.echo "Optional Arguments:"
    wscript.echo ""
    wscript.echo "-d:<DomainController>"
    wscript.echo "Specify the domain controller to search"
    wscript.echo "Ex: W2K3-DC-01"
    wscript.echo ""
    wscript.echo "-remove"
    wscript.echo "Removes the specified attribute"
    wscript.echo ""
    wscript.echo "Example: legacyEAS.vbs -d:W2K3-DC-01 -a:NorthAmerica"
    End Sub
    

Debuginstall.vbs

程序

使用記事本建立 Visual Basic 指令碼,修改用於偵錯應用程式的登錄

  1. 開啟記事本或其他文字編輯器。

  2. 將下列程式碼複製到檔案中,並將此檔案以描述性名稱與 .bat 副檔名加以儲存。建議您將檔案命名為 debuginstall.vbs

    #"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    #"!!!!!!!  THIS IS NOT A MICROSOFT SUPPORTED SCRIPT.  !!!!!!!!"
    #"!!!!!!!      TEST IN A LAB FOR DESIRED OUTCOME      !!!!!!!!"
    #"!!!!!!!                          !!!!!!!!!!"
    #"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    #" "
    '=======================================
    'debuginstall.vbs
    '
    'Copyright (c) 2005, Microsoft Corporation.  All Rights Reserved.
    '
    'THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
    'KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
    'IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
    'PARTICULAR PURPOSE.
    '
    'Description: This script will modify the registry for debugging applications. 
    '
    'Written by: Ross Smith IV (Microsoft)
    '
    'Version: 1.0
    'Last Updated: 2/10/2005
    '=======================================
    
    '=====================================================
    'Define Variables & Constants
    '=====================================================
    Option Explicit
    
    Dim objRegistry, oArg, i, strEnvKeyPath, strEnvPathName, strEnvPathValue, strServerName, strEnvSymbolName, strEnvSymbolValue
    
    Const HKEY_LOCAL_MACHINE = &H80000002 
    
    '=====================================================
    'Determine if CSCRIPT must be used
    '=====================================================
    if InStr(1,wscript.fullname,"cscript.exe",1) = 0 then
    wscript.echo "This script should be run using 'cscript.exe <scriptfile>'.  Terminating script."
    wscript.quit
    end if
    
    '=====================================================
    'Clear variables
    '=====================================================
    strEnvPathValue = ""
    strServerName = "."
    
    '=====================================================
    ' Parse command-line arguments
    '=====================================================
    Set oArg = wscript.arguments
    
    For i = 0 to oArg.Count - 1
    
    'Help Arguments
    If LCase(Left(oArg.Item(i),2)) = "/h" then
    DisplayHelpMessage
    wscript.quit
    end if
    
    If LCase(Left(oArg.Item(i),2)) = "/?" then
    DisplayHelpMessage
    wscript.quit
    end if
    
    If LCase(Left(oArg.Item(i),5)) = "/help" then
    DisplayHelpMessage
    wscript.quit
    end if
    
    'Get Computer Name for Remote Registry Access
    If LCase(Left(oArg.Item(i),3)) = "-s:" then
    strServerName = Mid(oArg.Item(i),4)
    'wscript.echo strServerName
    end if
    
    Next
    
    '=====================================================
    ' Open Registry
    '=====================================================
    Set objRegistry = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strServerName & "\root\default:StdRegProv")
    
    if Err.Number <> 0 then
    wscript.echo "ERROR: Unable to connect to remote registry on the local system (" & Err.Number & ", " & Err.Description & ").  Registry not updated."
    wscript.quit
    end if
    
    '=====================================================
    ' Define Registry Variables & Edit the Registry
    '=====================================================
    strEnvKeyPath = "System\CurrentControlSet\Control\Session Manager\Environment"
    strEnvPathName = "Path"
    strEnvSymbolName = "_NT_SYMBOL_PATH"
    strEnvSymbolValue = "%SystemRoot%\Symbols"
    'wscript.echo strEnvPath
    
    'Get the Path statement
    objRegistry.GetExpandedStringValue HKEY_LOCAL_MACHINE, strEnvKeyPath, strEnvPathName, strEnvPathValue
    'wscript.echo "Before " & strEnvPathValue
    
    'Set Path
    strEnvPathValue = StrEnvPathValue & ";C:\Tools\Exchange" & ";C:\Tools\Debugging"
    'wscript.echo "After " & strEnvPathValue
    
    'Write new registry values
    objRegistry.SetExpandedStringValue HKEY_LOCAL_MACHINE, strEnvKeyPath, strEnvPathName, strEnvPathValue
    objRegistry.SetStringValue HKEY_LOCAL_MACHINE, strEnvKeyPath, strEnvSymbolName, strEnvSymbolValue
    
    If Err.Number = 0 Then
    wscript.echo "Registry Updated!"
    Else
    WScript.Echo "Registry was not updated!" & " Error = " & Err.Number
    End If
    
    '=====================================================
    ' Closing & Clearing Connections
    '=====================================================
    Set objRegistry = Nothing
    
    '=====================================================
    ' Help Listing
    '=====================================================
    Sub DisplayHelpMessage()
    wscript.echo "Description: This script will set several registry settings needed"
    wscript.echo "             for debugging applications."
    wscript.echo ""
    wscript.echo "Usage: debuginstall.vbs [-s:<ServerName>] [/?] [/h] [/help]"
    wscript.echo ""
    wscript.echo "Optional Arguments"
    wscript.echo "-s:<ServerName>"
    wscript.echo "Specify the Server to modify"     
    wscript.echo "Ex: E2K-PF-01"
    wscript.echo ""
    End Sub
    

相關資訊

如需記載和自動化 Exchange 伺服器組建處理程序的相關資訊,請參閱伺服器安裝和自動化指南

若要確保您目前閱讀的是最新資訊,並尋找其他的 Exchange Server 2007 說明文件,請造訪 Exchange Server 技術資源中心.