Exchange 2010 Powershell指令碼攻略(八)
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:
[-LogPath:
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Exchange 2010 Powershell指令碼攻略(十五)指令碼
- Exchange 2010 Powershell指令碼攻略(十四)指令碼
- Exchange 2010 Powershell指令碼攻略(十三)指令碼
- Exchange 2010 Powershell指令碼攻略(十二)指令碼
- Exchange 2010 Powershell指令碼攻略(十一)指令碼
- Exchange 2010 Powershell指令碼攻略(十)指令碼
- Exchange 2010 Powershell指令碼攻略(九)指令碼
- Exchange 2010 Powershell指令碼攻略(七)指令碼
- Exchange 2010 Powershell指令碼攻略(六)指令碼
- Exchange 2010 Powershell指令碼攻略(五)指令碼
- Exchange 2010 Powershell指令碼攻略(四)指令碼
- Exchange 2010 Powershell指令碼攻略(三)指令碼
- Exchange 2010 Powershell指令碼攻略(二)指令碼
- Exchange 2010 Powershell指令碼攻略(一)指令碼
- powershell指令碼指令碼
- PowerShell 指令碼中的密碼指令碼密碼
- PowerShell 指令碼執行策略指令碼
- powershell重新命名指令碼指令碼
- Exchange 2010搭建
- Bash指令碼debug攻略指令碼
- 開機自啟動Powershell指令碼指令碼
- linux shell 指令碼攻略筆記Linux指令碼筆記
- 【黑客基礎】Windows PowerShell 指令碼學習(上)黑客Windows指令碼
- 最簡單的一個powershell的指令碼指令碼
- Exchange 2010需要的網路埠
- 微軟宣佈全新命令列+指令碼工具:PowerShell 7微軟命令列指令碼
- 五個實用的SQL Server PowerShell指令碼OMSQLServer指令碼
- 利用powershell指令碼Windows hosts記錄替換IP指令碼Windows
- Win10使用Powershell提示禁止執行指令碼怎麼辦 Win10使用Powershell提示禁止執行指令碼如何解決Win10指令碼
- shell指令碼攻略--DNS正向解析一鍵部署指令碼DNS
- 利用 Powershell 編寫簡單的瀏覽器指令碼瀏覽器指令碼
- 【連結】LINUX SHELL指令碼攻略筆記[速查]Linux指令碼筆記
- 《Linux Shell指令碼攻略(第2版)》書評Linux指令碼
- nuget打包檔案丟失如何使用powershell指令碼解決指令碼
- 使用VSCode遠端除錯惡意Powershell指令碼VSCode除錯指令碼
- 【VMware VCF】使用 PowerShell 指令碼管理 SDDC Manager 中的軟體包。指令碼
- LUA-天龍八部場景指令碼指令碼
- PowerShell 指令碼來監控 CPU、記憶體和磁碟使用情況:指令碼記憶體