ConfigureAdam
param($ldapPort, $sslPort, $logPath, $dataPath)
# Adam Service Name
$AdamServiceName = "ADAM_MSExchange"
# Transport Service Name
$EdgeTransportServiceName = "MSExchangeTransport"
# Adam Instance Name
$AdamInstanceName = "MSExchange"
# Activate Instance command string
$ActivateInstanceCommand = "'Activate Instance " + $AdamInstanceName + "'"
# Get the windows directry.
$sysDir = [System.Environment]::SystemDirectory
$windowsDir = [System.IO.Path]::GetDirectoryName($sysDir)
# Path to the dsdbutil
$dsdbutil = $windowsDir + "Adamdsdbutil.exe"
# Registry location of the ADAM Config
$adamConfigRegistryPath = "HKLM:SOFTWAREMicrosoftExchangeServerv14EdgeTransportRoleAdamSettingsMSExchange"
# LDAP Registry Entry Name
$ldapPortRegistryEntry = "LdapPort"
# SSL Registry Entry Name
$sslPortRegistryEntry = "SslPort"
# ADAM Data Log Path Registry Entry
$logFilesPathRegistryEntry = "LogFilesPath"
# ADAM Data File Path Registry Entry Name
$dataFilesPathRegistryEntry = "DataFilesPath"
######################################################
# Retrieves the ADAM Regsitry value of the given entry.
# adamProperty: Adam Setting to the retrieved
# returns: return entry value of found else null
######################################################
function GetAdamRegistryEntry([String] $adamProperty)
{
$adamEntries = get-itemproperty $adamConfigRegistryPath
if($adamEntries)
{
return $adamEntries.($adamProperty)
}
return $null
}
######################################################
# Verifies whether the sequence of commands failed or succeeded.
# statusLog: Contains the status of the sequence of commands executed
# returns: True if successs else false.
######################################################
function VerifyStatusLog([Object] $statusLog)
{
$status = $false
foreach($log in $statusLog)
{
# Very Nasty way of doing this check.
# Other way of doing is pass the entire success message and compare it.
# either way it still ends with comparing with some string.
# "SUCCESSFULLY" is seen only if the entire command is succeeded.
# Opened a Bug to track this(Bug 59676)
if($log.ToString().ToUpper().Contains("SUCCESSFULLY"))
{
$status = $true
break
}
}
if($status -eq $false)
{
write-host $statusLog
}
return $status
}
######################################################
# Set the ADAM Regsitry value of the given entry.
# adamProperty: Adam Setting to the changed
# adamPropertyValue: Value for the Entry.
######################################################
function SetAdamRegistryEntry([String] $adamProperty, [String] $adamPropertyValue)
{
set-itemproperty $adamConfigRegistryPath -name $adamProperty -value $adamPropertyValue
}
######################################################
# Changes the LDAP Port of the ADAM. if the new value
# is same as the existing value do nothing. Also updates
# the registry Entry of the ADAM Section in Exchange
# ldapport: LDAP Port Value
######################################################
function ChangeLDAPPort([int] $ldapPort)
{
$currentValue = GetAdamRegistryEntry($ldapPortRegistryEntry)
if($currentValue -eq $null)
{
write-host "Failed to retrieve the current LDAP Port from Registry"
return
}
elseif($currentValue -eq $ldapPort)
{
write-host "Current LDAP Port setting is $ldapPort"
return
}
$ldapPortCommand = "'LDAP Port " + $ldapPort + "'"
$quit = "'quit'"
$command = $dsdbutil +
" " +
$ActivateInstanceCommand +
" " + $ldapPortCommand +
" " + $quit
$statusLog = invoke-expression($command)
$isSuccess = VerifyStatusLog($statusLog)
if($isSuccess -eq $true)
{
SetAdamRegistryEntry $ldapPortRegistryEntry $ldapPort
write-host "LDAP Port Successfully changed to $ldapPort"
}
else
{
write-host "Changing LDAP Port to $ldapPort failed."
}
}
######################################################
# Changes the SSL Port of the ADAM. if the new value
# is same as the existing value do nothing. Also updates
# the registry Entry of the ADAM Section in Exchange
# sslport: SSL Port Value
######################################################
function ChangeSSLPort([int] $sslPort)
{
$currentValue = GetAdamRegistryEntry($sslPortRegistryEntry)
if($currentValue -eq $null)
{
write-host "Failed to retrieve the current SSL Port from Registry"
return
}
elseif($currentValue -eq $sslPort)
{
write-host "Current SSL Port setting is $sslport"
return
}
$sslPortCommand = "'SSL Port " + $sslPort + "'"
$quit = "'quit'"
$statusLog = invoke-expression($dsdbutil +
" " +
$ActivateInstanceCommand +
" " + $sslPortCommand +
" " + $quit)
$isSuccess = VerifyStatusLog($statusLog)
if($isSuccess -eq $true)
{
SetAdamRegistryEntry $sslPortRegistryEntry $sslPort
write-host "SSL Port Successfully changed to $sslPort"
}
else
{
write-host "Changing SSL Port to $sslPort failed."
}
}
######################################################
# Changes the Log Path of the ADAM. if the new value
# is same as the existing value do nothing. Also updates
# the registry Entry of the ADAM Section in Exchange
# dataLogPath: Log files path
######################################################
function ChangeLogPath([String] $logPath)
{
$currentValue = GetAdamRegistryEntry($logFilesPathRegistryEntry)
if($currentValue -eq $null)
{
write-host "Failed to retrieve the current Log Path from Registry"
return
}
elseif($currentValue -eq $logPath)
{
write-host "Current Data Log Path setting is $logPath"
return
}
$filesCommand = "'Files'"
$quit = "'quit'"
$setlogpathCommand = "'set path logs ``"" + $logPath + "``"'"
$command = $dsdbutil + " " +
$ActivateInstanceCommand + " " +
$filesCommand + " " + $setlogpathCommand + " " +
$quit + " " + $quit
$statusLog = invoke-expression($command)
$isSuccess = VerifyStatusLog($statusLog)
if($isSuccess -eq $true)
{
SetAdamRegistryEntry $logFilesPathRegistryEntry $logPath
write-host "Log Path Successfully changed to $logPath"
}
else
{
write-host "Changing Log Path to $logPath failed."
}
}
######################################################
# Changes the DATA File Path of the ADAM. if the new value
# is same as the existing value do nothing. Also updates
# the registry Entry of the ADAM Section in Exchange
# dataLogPath: Data file path
######################################################
function ChangeDataPath([String] $dataPath)
{
$currentValue = GetAdamRegistryEntry($dataFilesPathRegistryEntry)
if($currentValue -eq $null)
{
write-host "Failed to retrieve the current Data File Path from Registry"
return
}
elseif($currentValue -eq $dataPath)
{
write-host "Current Data File Path setting is $dataPath"
return
}
$filesCommand = "'Files'"
$quit = "'quit'"
$setdatafilepathCommand = "'Move DB to ``"" + $dataPath + "``"'"
$command = $dsdbutil + " " +
$ActivateInstanceCommand + " " +
$filesCommand + " " +
$setdatafilepathCommand + " " +
$quit + " " + $quit
$statusLog = invoke-expression($command)
$isSuccess = verifyStatusLog($statusLog)
if($isSuccess -eq $true)
{
setAdamRegistryEntry $dataFilesPathRegistryEntry $dataPath
write-host "Data Path Successfully changed to $dataPath"
}
else
{
write-host "Changing Data Path to $dataPath failed."
}
}
######################################################
# Validate the input data.
# return: return false if no input values are passed
# else true.
######################################################
function ValidateInput()
{
if(($ldapport -eq $null) -and
($sslport -eq $null) -and
($logPath -eq $null) -and
($dataPath -eq $null))
{
write-host "ConfigureAdam.ps1 [-LDAPPort:] [-SSLPort:]
[-LogPath:] [-DataPath:]"
write-host "At least one parameter must be supplied."
return $false
}
return $true
}
#############################################################
# Script starts here. Validate the input.
# Calls the methods to set the each config property
# to be set.
#############################################################
$isValidInput = ValidateInput
if($isValidInput -eq $false)
{
return
}
stop-service -Name:$AdamServiceName -Force:$true
$adamServiceStatus = get-service $AdamServiceName
if(($adamServiceStatus -eq $null) -or
($adamServiceStatus.Status -ne [System.ServiceProcess.ServiceControllerStatus]::Stopped))
{
write-host "Stopping Adam Servive failed"
return
}
if($ldapport)
{
$status = ChangeLDAPPort $ldapPort
}
if($sslport)
{
$status = ChangeSSLPort $sslPort
}
if($logPath)
{
$status = ChangeLogPath $logPath
}
if($dataPath)
{
$status = ChangeDataPath $dataPath
}
start-service $AdamServiceName
start-service $EdgeTransportServiceName
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23700676/viewspace-1052334/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23700676/viewspace-1052334/