服务器构建 DVD Visual Basic 脚本示例

 

适用于: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1

上一次修改主题: 2008-07-24

本主题提供的 Visual Basic 脚本示例可作为一个起点,创建制作 DVD 所需的脚本文件,从而改进服务器构建过程。您可以修改以下步骤,以创建组织所需的脚本。

为了让以下示例脚本在您的具体环境中正常运行,您必须对其进行修改。这些脚本可帮助您将环境中部署 Exchange Server 所需的许多步骤进行自动化。

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 Server 构建过程的详细信息,请参阅服务器安装和自动化指南