Exchange 2010 Powershell指令碼攻略(一)

ImSunkist發表於2011-07-12

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章