AddReplicaToPFRecursive
Param(
[string] $Server,
[string] $TopPublicFolder = "",
[string] $ServerToAdd = ""
)
# This function validates the scripts parameters
function ValidateParams
{
$validInputs = $true
$errorString = ""
if ($TopPublicFolder -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The -TopPublicFolder parameter is required. Please pass in a valid Public Folder path, name, or entryID."
}
if ($ServerToAdd -eq "")
{
$validInputs = $false
$errorString += "`nMissing parameter: The -ServerToAdd parameter is required. Please pass in a valid mailbox server identity"
}
if (!$validInputs)
{
Write-error "$errorString"
}
return $validInputs
}
# Function that returns true if the incoming argument is a help request
function IsHelpRequest
{
param($argument)
return ($argument -eq "-?" -or $argument -eq "-help");
}
# Function that displays the help related to this script following
# the same format provided by get-help or -?
function Usage
{
@"
NAME:
`tAddReplicaToPFRecursive.ps1
SYNOPSIS:
`tAdds a new server to the replica list for a public folder, and all the
`tcontained folders under it. If the server is already listed in the
`treplica list for a particular folder, nothing is changed for that folder.
SYNTAX:
`tAddReplicaToPFRecursive.ps1
`t`t[-Server ]
`t`t[-TopPublicFolder ]
`t`t[-ServerToAdd ]
PARAMETERS:
`t-Server (optional)
`t`tThe server to operate against. Must be an Exchange 2007 Mailbox server
`t`twith a public folder database. Defaults to a convenient server.
`t-TopPublicFolder (required)
`t`tThe folder identity of the top of the tree of folders to modify
`t-ServerToAdd (required)
`t`tThe server identity to add to the replica list. Must be a server with a
`t`tpublic folder database.
`t-------------------------- EXAMPLE 1 --------------------------
C:PS> .AddReplicaToPFRecursive.ps1 -TopPublicFolder "Folder" -ServerToAdd "MyEx2003Server"
`t-------------------------- EXAMPLE 2 --------------------------
C:PS> .AddReplicaToPFRecursive.ps1 -Server "MyEx2007Server" -TopPublicFolder "Folder" -ServerToAdd "MyEx2003Server"
REMARKS:
`tReplica lists are updated quickly, but data replication can take a
`tsubstantial amount of time. The server being added will not show
`tcontent for some time.
RELATED LINKS:
`tAddReplicaToPFRecursive.ps1
`tMoveAllReplicas.ps1
`tRemoveReplicaFromPFRecursive.ps1
`tReplaceReplicaOnPFRecursive.ps1
`tGet-Help
"@
}
####################################################################################################
# Script starts here
####################################################################################################
# Check for Usage Statement Request
$args | foreach { if (IsHelpRequest $_) { Usage; exit; } }
# Validate the parameters
$ifValidParams = ValidateParams;
if (!$ifValidParams) { exit; }
$db = Get-PublicFolderDatabase -Server $ServerToAdd -ErrorAction Stop
if ($server)
{
$getpfcmd = "Get-PublicFolder -Server $Server -identity ""$TopPublicFolder"" -Recurse -ResultSize Unlimited"
}
else
{
$getpfcmd = "Get-PublicFolder -Identity ""$TopPublicFolder"" -Recurse -ResultSize Unlimited"
}
# These folders are not supposed to have any replica list,
# and attempts to change the replica list on any of them
# will result in an error. We'll just skip over these in the
# loop and avoid any unpleasantries.
$ExcludedFolders = new-object System.Collections.ArrayList
[void]$ExcludedFolders.Add("")
[void]$ExcludedFolders.Add("NON_IPM_SUBTREE")
[void]$ExcludedFolders.Add("NON_IPM_SUBTREESCHEDULE+ FREE BUSY")
[void]$ExcludedFolders.Add("NON_IPM_SUBTREEOFFLINE ADDRESS BOOK")
[void]$ExcludedFolders.Add("NON_IPM_SUBTREEEFORMS REGISTRY")
# The cast to [void] is to ignore the result of the Add method,
# which normally returns an int value. This int value is output to the
# console and is of no interest to anybody.
$pfsToChange = new-object System.Collections.ArrayList
invoke-expression $getpfcmd | foreach {
$OriginatingServer = $_.OriginatingServer
if (!$ExcludedFolders.Contains($_.Identity.ToString())) {
if (!$_.Replicas.Contains($db.Identity)) {
[void]$pfsToChange.Add($_.Identity)
}
}
}
$pfsToChange | foreach {
$pf = Get-publicfolder $_ -Server $OriginatingServer
$pf.Replicas += $db.Identity
Set-PublicFolder -Server $OriginatingServer -Identity $_ -Replicas $pf.Replicas
}
[@more@]
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23700676/viewspace-1052327/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23700676/viewspace-1052327/