Share via


Exemples de scripts Visual Basic du DVD de création de serveurs

 

S’applique à : Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1

Dernière rubrique modifiée : 2008-07-24

Cette rubrique fournit des exemples de scripts Visual Basic pouvant servir de base à la création des fichiers de script requis pour la réalisation d'un DVD de création visant à améliorer le processus de création de serveurs. Vous pouvez modifier les procédures suivantes pour créer les scripts nécessaires à votre organisation.

Les exemples de scripts suivants doivent être modifiés afin de les rendre fonctionnels dans votre environnement spécifique. Ces scripts vous permettront d'automatiser de nombreuses procédures nécessaires au déploiement d'un serveur Exchange dans votre environnement.

Exemples de scripts Visual Basic

importantImportant :
Ces exemples de scripts présentent la procédure d'implémentation des étapes d'automatisation. Vous devez les modifier afin de les adapter à votre environnement. Vous devez tout tester dans un environnement de laboratoire avant de tenter une utilisation dans votre environnement de production.

Avant de commencer

Pour exécuter les procédures suivantes, vous devez utiliser un compte membre du groupe Administrateurs local.

Pour plus d'informations sur les autorisations, la délégation de rôles et les droits requis pour administrer Exchange 2007, consultez la rubrique Considérations relatives aux autorisations.

LegacyEAS.vbs

Procédure

Utilisez le Bloc-notes pour créer un script Visual Basic permettant d'activer l'authentification Windows intégrée et l'authentification de base sur le répertoire virtuel /Microsoft-Server-Activesync des serveurs Exchange 2003 (au sein d'un groupe d'administration défini)

  1. Ouvrez le Bloc-notes ou un autre éditeur de texte.

  2. Copiez le code suivant dans un fichier et enregistrez-le en lui attribuant un nom descriptif et l'extension .bat. Il est recommandé de nommer le fichier 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

Procédure

Utilisez le Bloc-notes pour créer un script Visual Basic permettant de modifier le Registre à des fins de débogage des applications

  1. Ouvrez le Bloc-notes ou un autre éditeur de texte.

  2. Copiez le code suivant dans un fichier et enregistrez-le en lui attribuant un nom descriptif et l'extension .bat. Il est recommandé de nommer le fichier 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
    

Pour plus d'informations

Pour plus d'informations sur la documentation et l'automatisation du processus de création de serveurs Exchange, consultez la rubrique Guides relatifs à l'installation des serveurs et à l'automatisation.