Link Translation in ISA Server 2004
The Web pages sent back to external clients from published Web servers may contain links that include internal names of hosts. Because the names of these protected hosts are not resolved for external clients, these links are broken. Also, sending the internal names of hosts to external clients exposes these names to potential hackers. To overcome these problems, Microsoft® Internet Security and Acceleration (ISA) Server includes a Web filter called Link Translation Filter. When enabled, this Web filter performs link translation according to a default set of rules, or according to a user-defined dictionary that maps strings containing internal host names to strings containing publicly resolvable host names for the applicable Web publishing rule, if the type of message body specified in the Content-Type header of the response is included in one of the translatable content type sets specified for the rule. By default, link translation is applied only to the content types included in the HTML Documents content type set, although other content type sets can be specified. This setting is global for all Web publishing rules. Note that ISA Server performs link translation only on strings that are specified in UCS Transformation Format 8 (UTF-8) format in HTML documents.
Enabling and Disabling Link Translation
Script Listing: LinkTranslation_Enable.vbs
Managing the Translatable Content Type Sets
Script Listing: LinkTranslation_EditContentTypes.vbs
Managing Link Translation Dictionaries
Script Listing: Link Translation_EditDictionary.vbs
Enabling and Disabling Link Translation
The Microsoft Visual Basic® Scripting Edition (VBScript) code in LinkTranslation_Enable.vbs (listed below) retrieves the configuration of the Web publishing rule specified by the user. Then, depending on the action specified by the user, the script enables or disables link translation for the rule by setting the TranslateLinks property of the Web publishing rule to True or False, or indicates whether link translation is enabled for the rule on the basis of the value of the TranslateLinks property.
Usage:Cscript LinkTranslation_Enable.vbs Action RuleName
Action specifies one of the following actions:
- Enable. Enable link translation for the specified Web publishing rule.
- Disable. Disable link translation for the specified Web publishing rule.
- Status. Get the link translation status for the specified Web publishing rule.
RuleName specifies the Web publishing rule.
To enable link translation for a specified Web publishing rule
Define a constant for the error that is expected if the Web publishing rule specified cannot be found, and a constant for the enumeration value needed for determining that the policy rule specified is a Web publishing rule.
Declare an FPCPolicyRule object.
Call a subprocedure that retrieves the Web publishing rule having the name passed to it by performing the following steps:
- Create an instance of the FPC COM object, which provides access to the other ISA Server administration COM objects.
- Declare an FPCPolicyRules collection and get a reference to the existing policy rules collection.
- Get a reference to the specified policy rule and verify that it is a Web publishing rule using its Type property. If the rule is not a Web publishing rule, notify the user and skip the remaining steps of this procedure.
If the TranslateLinks property of the Web publishing rule is not set to True, set this property to True and call Save on the FPCPolicyRule object to save the change.
To disable link translation for a specified Web publishing rule
Perform steps 1 through 3 of the procedure for enabling link translation.
If the TranslateLinks property of the Web publishing rule is not set to False, set this property to False and call Save on the FPCPolicyRule object to save the change.
To get the link translation status for a specified Web publishing rule
Perform steps 1 through 3 of the procedure for enabling link translation.
Retrieve the value of the TranslateLinks property of the Web publishing rule and display a message indicating whether link translation is enabled or disabled based on the value retrieved.
Script Listing: LinkTranslation_Enable.vbs
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright (c) Microsoft Corporation. All rights reserved.
' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE
' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS
' HEREBY PERMITTED.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' This script retrieves the configuration of the Web publishing rule specified
' by the user. Then, depending on the action specified by the user, the script
' enables or disables link translation for the rule by setting the
' TranslateLinks property of the Web publishing rule to True or False, or
' indicates whether link translation is enabled for the rule on the basis of
' the value of the TranslateLinks property.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit
'
' Define a constant for the expected error.
'
const Error_FileNotFound = &H80070002
const fpcPolicyRuleWebPublishing = 2
Main WScript.Arguments
Sub Main(args)
Dim ruleName
Dim action
If(2 <> args.Count) Then
Usage()
End If
action = LCase(args(0))
ruleName = args(1)
Select Case action
Case "enable":
EnableLinkTranslation ruleName, True
Case "disable":
EnableLinkTranslation ruleName, False
Case "status":
GetLinkTranslationStatus ruleName
Case Else
Usage()
End Select
End Sub
'
' Enable/disable link translation for the specified Web publishing rule.
'
Sub EnableLinkTranslation(ruleName, fEnableLT)
Dim wpRule ' An FPCPolicyRule object
Dim Status ' A string
If(fEnableLT) Then
Status = "enabled"
Else
Status = "disabled"
End If
Set wpRule = GetWebPublishingRule(ruleName)
If (wpRule.WebPublishingProperties.TranslateLinks <> fEnableLT) Then
wpRule.WebPublishingProperties.TranslateLinks = fEnableLT
wpRule.Save
WScript.Echo "Link translation has been " & Status & "."
Else
WScript.Echo "Link translation is already " & Status & "."
End If
End Sub
'
' Display the status of link translation for the specified Web Publishing rule.
'
Sub GetLinkTranslationStatus(ruleName)
Dim wpRule ' An FPCPolicyRule object
Dim Status ' A string
Set wpRule = GetWebPublishingRule(ruleName)
If(wpRule.WebPublishingProperties.TranslateLinks = True) Then
Status = "enabled"
Else
Status = "disabled"
End If
WScript.Echo "Link translation is " & Status _
& " for the Web publishing rule " & wpRule.Name & "."
End Sub
'
' Get a Web publishing rule by name.
'
Function GetWebPublishingRule(ruleName)
Dim root ' The FPCLib.FPC root object
Dim rules ' An FPCPolicyRules collection
Dim errorCode, errorDescript
Set root = WScript.CreateObject("FPC.Root")
Set rules = root.GetContainingArray.ArrayPolicy.PolicyRules
On Error Resume Next
Set GetWebPublishingRule = rules.Item(ruleName)
Select Case err.Number
Case Error_FileNotFound:
WScript.Echo "The Web publishing rule " & ruleName _
& " does not exist."
WScript.Quit
Case 0:
' OK
Case Else
err.Raise err.Number,, err.Description
End Select
On error goto 0
If wpRule.Type <> fpcPolicyRuleWebPublishing Then
WScript.Echo "The policy rule " & ruleName _
& " is not a Web publishing rule."
WScript.Quit
End If
End Function
Sub Usage()
WScript.Echo "Usage:" & VbCrLf _
& " " & WScript.ScriptName & " Action RuleName" & VbCrLf _
& "" & VbCrLf _
& " Action:" & VbCrLf _
& " Enable - Enable link translation for the specified rule." _
& VbCrLf _
& " Disable - Enable link translation for the specified rule." _
& VbCrLf _
& " Status - Get the link translation status " _
& "for the specified rule." & VbCrLf
WScript.Quit
End Sub
Managing the Translatable Content Type Sets
When link translation is enabled, ISA Server checks the Content-Type header of the response to determine whether link translation should be applied to the body of the message. The names of content type sets, which contain lists of strings corresponding to Content-Type headers, can be specified in a specific parameters set associated with Link Translation Filter. By default, the following content type sets are available for specifying translatable content types:
- Application
- Application Data Files
- Audio
- Compressed Files
- Documents
- HTML Documents
- Images
- Macro Documents
- Text
- Video
- VRML
By default, link translation is applied only to the content types included in the HTML Documents content type set.
The VBScript code in LinkTranslation_EditContentTypes.vbs retrieves the collection of vendor parameters sets associated with Link Translation Filter. Then, depending on the action specified by the user, the script reverts to the default list of translatable content types (the content types included in the HTML Documents content type set) by clearing all the translatable content type sets specified in the vendor parameters set that defines the translatable content type sets, displays the current list of translatable content type sets defined in the AllNames property of this vendor parameters set, or sets the list of translatable content type sets.
Usage:[Cscript] LinkTranslation_EditContentTypes.vbs Action [ContentTypes]
Action specifies one of the following actions:
- List. List current translatable content type sets.
- Default. Reset to default translatable content types.
- SetTypes. Set the specified translatable content type sets (space-delimited list).
ContentTypes specifies the content type set.
Example:
LinkTranslation_EditContentTypes.vbs SetTypes “HTML Documents” Video
To list the current translatable content type sets
Define constants for the GUID of Link Translation Filter ({9DEEF135-75DB-4aab-B2AC-314FBC98EF14}) and for the GUID of the vendor parameters set that specifies the translatable content type sets ({E4FA56DB-7A77-4d13-B421-6641DF2D1AF0}).
Create an instance of the FPC COM object, which provides access to the other ISA Server administration COM objects.
Get a reference to the FPCVendorParametersSets collection associated with Link Translation Filter.
Get a reference to the FPCVendorParametersSet object that specifies the translatable content type sets.
If the parameters set specifying the translatable content type sets exists, retrieve the names of the parameters, which specify the translatable content type sets, and display them. If the parameters set specifying the translatable content type sets does not exist, display a message indicating that only the default content types will be used.
To reset to the default translatable content types
Perform steps 1 through 3 of the procedure for listing the current translatable content type sets.
Call the Remove method of the FPCVendorParametersSets collection with the GUID of the parameters set that specifies the translatable content type sets.
If the parameters set that specifies the translatable content type sets is successfully removed, call Save on the FPCVendorParametersSets collection to save the changes.
To set to the translatable content type sets
Perform steps 1 through 3 of the procedure for listing the current translatable content type sets.
Call the Remove method of the vendor parameters sets collection with the GUID of the parameters set that specifies the translatable content type sets to remove this parameters set if it exists.
Call the Add method of the vendor parameters sets collection with the first parameters set to the GUID of the parameters set that specifies the translatable content type sets to create a new empty parameters set for the translatable content type sets.
In a For loop, for each translatable content type set that was specified in the command line, call the Value property of the parameters set defining the translatable content type sets to add a parameter whose name is set to the name of the translatable content type set and whose value is set to 1.
Call Save on the FPCVendorParametersSets collection to save the changes.
Script Listing: LinkTranslation_EditContentTypes.vbs
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright (c) Microsoft Corporation. All rights reserved.
' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE
' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS
' HEREBY PERMITTED.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' This script retrieves the collection of vendor parameters sets associated with
' Link Translation Filter. Then, depending on the action specified by the user,
' the script reverts to the default translatable content type set (HTML
' Documents) by clearing all the translatable content type sets specified in the
' vendor parameters set that contains the translatable content type sets,
' displays the current list of translatable content type sets defined in the
' AllNames property of the vendor parameters set, or sets the list of
' translatable content type sets.
'
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit
'
' Define constants for the GUIDs of Link Translation Filter and the vendor
' parameters set that specifies the translatable content type sets.
'
Const LTFGUID = "{9DEEF135-75DB-4aab-B2AC-314FBC98EF14}"
Const TranslatableContentTypeSetsGUID = "{E4FA56DB-7A77-4d13-B421-6641DF2D1AF0}"
Const Error_FileNotFound = &H80070002
Main WScript.Arguments
Sub Main(args)
Dim root ' The FPCLib.FPC root object
Dim vpSets ' An FPCVendorParametersSets collection
If(0 = args.Count) Then
Usage()
End If
Set root = WScript.CreateObject("FPC.Root")
Set vpSets = _
root.GetContainingArray.Extensions.WebFilters(LTFGUID).VendorParametersSets
Select Case LCase(args(0))
Case "list":
ListTranslatableContentTypeSets vpSets
Case "default":
' Clear the list of translatable content type sets.
RemoveFromVPSs vpSets, TranslatableContentTypeSetsGUID
WScript.Echo "Using the default translatable content types..."
Case "settypes":
If(args.Count < 2) Then
Usage()
End If
SetTranslatableContentTypeSets vpSets, args
Case Else
Usage()
End Select
End Sub
'
' Display the current translatable content type sets.
'
Sub ListTranslatableContentTypeSets(vpSets)
Dim vpSet ' An FPCVendorParametersSet object
Dim errorCode, errorDescript, contentTypeSets, contentTypeSet
On Error Resume Next
Set vpSet = vpSets(TranslatableContentTypeSetsGUID)
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case 0
contentTypeSets = ""
For Each contentTypeSet in vpSet.AllNames
contentTypeSets = contentTypeSets & " " & contentTypeSet
Next
WScript.Echo "Translatable content type sets: " & contentTypeSets
Case Error_FileNotFound:
WScript.Echo "Using the default translatable content types only..."
Case Else
err.Raise errorCode,, errorDescript
End Select
End Sub
'
' Set specific translatable content type sets.
'
Sub SetTranslatableContentTypeSets(vpSets, contentTypeSets)
Dim vpSet ' An FPCVendorParametersSet object
Dim first, contentTypeSet
RemoveFromVPSs vpSets, TranslatableContentTypeSetsGUID
Set vpSet = vpSets.Add(TranslatableContentTypeSetsGUID, False)
first = True
For Each contentTypeSet In contentTypeSets
If(first) Then
first = False ' Skip the first command-line parameter.
Else
vpSet.Value(contentTypeSet) = 1
End If
Next
vpSets.Save
ListTranslatableContentTypeSets vpSets
End Sub
'
' Remove the specified VendorParametersSet from VendorParametersSets collection.
'
sub RemoveFromVPSs(vpSets, setName)
Dim errorCode, errorDescript
On Error Resume Next
vpSets.Remove setName
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case 0:
vpSets.Save
Case Error_FileNotFound:
' Ignore the error. The object has already been removed.
Case Else
err.Raise errorCode,,errorDescript
End Select
End Sub
sub Usage()
Dim usageText
usageText = "Usage:" & vbCrLf _
& vbCrLf _
& " " & wscript.ScriptName & " Action [Content Type Sets]" & vbCrLf _
& vbCrLf _
& " Action:" & vbCrLf _
& " List - List current translatable content type sets." _
& vbCrLf _
& " Default - Reset to default translatable content types." _
& vbCrLf _
& " SetTypes - Set the specified translatable content type sets" _
& " (space-delimited list)." & vbCrLf _
& vbCrLf _
& " Example:" & vbCrLf _
& " " & wscript.ScriptName & " SetTypes Application" _
& " ""HTML Documents""" & vbCrLf
WScript.Echo usageText
WScript.Quit
End Sub
Managing Link Translation Dictionaries
Each Web publishing rule can have its own link translation dictionary, which is defined in a specific vendor parameters set associated with it. Each entry in a dictionary is a pair of strings consisting of a string containing a host name that is used internally and a string containing a host name that can be resolved externally. The internal string is specified as the name of a parameter, and the external string is specified as its value.
The VBScript code in LinkTranslation_EditDictionary.vbs lets the user manage the link translation dictionaries for Web publishing rules. Depending on the action specified by the user, this script lists the link translation dictionaries of all Web publishing rules, lists all the internal/external pairs contained in the dictionary for the specified Web publishing rule, removes the specified entry from the dictionary for the specified rule, removes the entire dictionary for the specified rule, and adds an internal/external pair of strings to the dictionary for the specified rule.
Usage:LinkTranslation_EditDictionary.vbs Action [RuleName] [IntString] [ExtString]
Action specifies one of the following actions:
- ListAll. List dictionaries for all Web publishing rules.
- List. List dictionary for the specified rule.
- Clear. Clear all entries from the link translation dictionary for the specified rule.
- Add. Add an entry defined by InternalString and ExternalString to the dictionary of the specified rule.
- RemoveEntry. Remove the entry for InternalString from the dictionary of the specified rule.
RuleName specifies the Web publishing rule.
IntString specifies a string containing a host name that is used internally.
ExtString specifies a string containing a host name that can be resolved externally.
To list the dictionaries for all Web publishing rules
Define a constant for the GUID of a vendor parameters set that defines a link translation dictionary ({3563FFF5-DF93-40eb-ABC3-D24B5F14D8AA}) and a constant for the enumeration value for indicating that a policy rule is a Web publishing rule.
Create an instance of the FPC COM object, which provides access to the other ISA Server administration COM objects.
Declare an FPCPolicyRules collection and an FPCPolicyRule object.
Get a reference to the existing policy rules collection.
In a For loop, for each rule in the policy rules collection, use the Type property to determine whether it is a Web publishing rule. If the policy rule is a Web publishing rule, call a subprocedure that lists the entries in its link translation dictionary by performing the following steps:
- Declare an FPCVendorParametersSets collection and an FPCVendorParametersSet object.
- Get a reference to the FPCVendorParametersSets collection of the rule.
- Try to get a reference to the FPCVendorParametersSet object that defines a link translation dictionary in the collection.
- If a reference is obtained to a link translation dictionary that is not empty, in a For loop, display each name (internal string) retrieved from the AllNames property followed by the corresponding external string, which is obtained by calling the Value property with the parameter set to the internal string.
To list the dictionary for a specified Web publishing rule
Perform steps 1 through 4 of the procedure for listing the dictionaries for all Web publishing rules.
Retrieve the name of the specified Web publishing rule from the second command-line argument.
Get a reference to the specified policy rule and verify that it is a Web publishing rule using its Type property. If the rule is not a Web publishing rule, notify the user and skip the remaining steps of this procedure.
Call the subprocedure described in Step 5 of the procedure for listing the dictionaries for all Web publishing rules to display the entries in the rule’s link translation dictionary.
To clear all entries from the link translation dictionary for a specified rule
Perform steps 1 through 4 of the procedure for listing the dictionaries for all Web publishing rules.
Retrieve the name of the specified Web publishing rule from the second command-line argument.
Get a reference to the specified policy rule and verify that it is a Web publishing rule using its Type property. If the rule is not a Web publishing rule, notify the user and skip the remaining steps of this procedure.
Declare an FPCVendorParametersSets collection and an FPCVendorParametersSet object.
Get a reference to the FPCVendorParametersSets collection of the rule.
Call the Remove method of the FPCVendorParametersSets collection with the parameters set to the GUID of a parameters set that defines the link translation dictionary to remove this parameters set if it exists.
If the link translation dictionary is successfully removed, call Save on the FPCVendorParametersSets collection to save the changes.
To add an entry to the link translation dictionary for a specified rule
Perform steps 1 through 4 of the procedure for listing the dictionaries for all Web publishing rules.
Retrieve the name of the specified Web publishing rule from the second command-line argument.
Get a reference to the specified policy rule and verify that it is a Web publishing rule using its Type property. If the rule is not a Web publishing rule, notify the user and skip the remaining steps of this procedure.
Declare an FPCVendorParametersSets collection and an FPCVendorParametersSet object.
Get a reference to the FPCVendorParametersSets collection of the rule.
Try to get a reference to the existing parameters set that defines the link translation dictionary.
Call the Add method of the vendor parameters sets collection with the first parameters set to the GUID of the parameters set that defines the link translation dictionary to create a new empty parameters set for the link translation dictionary.
Call the Value property of the parameters set defining the link translation dictionary to add a parameter whose name is the internal string specified in the command line and whose value is set to the external string specified in the command line.
Call Save on the FPCVendorParametersSets collection to save the changes.
To remove an entry from the link translation dictionary for a specified rule
Perform steps 1 through 4 of the procedure for listing the dictionaries for all Web publishing rules.
Retrieve the name of the specified Web publishing rule from the second command-line argument.
Get a reference to the specified policy rule and verify that it is a Web publishing rule using its Type property. If the rule is not a Web publishing rule, notify the user and skip the remaining steps of this procedure.
Declare an FPCVendorParametersSets collection and an FPCVendorParametersSet object.
Get a reference to the FPCVendorParametersSets collection of the rule.
Try to get a reference to the existing parameters set that defines the link translation dictionary. If this parameters set does not exist, skip the remaining steps of this procedure.
Call the RemoveValue method of the parameters set defining the link translation dictionary with the parameters set to the internal string specified in the command line to remove the entry specified.
If the entry is successfully removed, call Save on the FPCVendorParametersSet object to save the changes.
Script Listing: Link Translation_EditDictionary.vbs
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright (c) Microsoft Corporation. All rights reserved.
' THIS CODE IS MADE AVAILABLE AS IS, WITHOUT WARRANTY OF ANY KIND. THE ENTIRE
' RISK OF THE USE OR THE RESULTS FROM THE USE OF THIS CODE REMAINS WITH THE
' USER. USE AND REDISTRIBUTION OF THIS CODE, WITH OR WITHOUT MODIFICATION, IS
' HEREBY PERMITTED.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Depending on the action specified by the user in the command line, this script
' lists the link-translation dictionaries of all Web publishing rules, lists all
' the entries defining internal-external pairs of strings in the dictionary for
' the specified Web publishing rule, removes the specified entry from the
' dictionary for the specified rule, removes the entire dictionary for the
' specified rule, adds an entry defining an internal-external pair to the
' dictionary for the specified rule.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Option Explicit
'
' Define a constant for the GUID of the vendor parameters set that defines
' a link-translation dictionary.
'
Const LinkTranslatDicGUID = "{3563FFF5-DF93-40eb-ABC3-D24B5F14D8AA}"
Const fpcPolicyRuleWebPublishing = 2
Const Error_FileNotFound = &H80070002
Dim root ' The FPCLib.FPC root object
Main Wscript.Arguments
Sub Main(args)
Dim ruleName, action
If(0 = args.Count) Then
Usage()
End If
Set root = WScript.CreateObject("FPC.Root")
action = LCase(args(0))
Select Case action
Case "listall":
ListAllDictionaries
Case "list":
If(2 > args.Count) Then
Usage()
End If
ruleName = args(1)
ListDictionary GetWebPublishingRule(ruleName)
Case "clear":
If(2 > args.Count) Then
Usage()
End If
ruleName = args(1)
ClearDictionary GetWebPublishingRule(ruleName)
Case "add":
If(4 > args.count) Then
Usage()
End If
ruleName = args(1)
AddItemToDictionary GetWebPublishingRule(ruleName), args(2), args(3)
Case "removeentry":
If(3 > args.Count) Then
Usage()
End If
ruleName = args(1)
RemoveEntry GetWebPublishingRule(ruleName), args(2)
case Else
Usage()
End Select
End Sub
'
' List the dictionaries of all Web publishing rules.
'
Sub ListAllDictionaries()
Dim rules ' An FPCPolicyRules collection
Dim rule ' An FPCPolicyRule object
Set rules = root.GetContainingArray.ArrayPolicy.PolicyRules
For Each rule in rules
If rule.Type = fpcPolicyRuleWebPublishing Then
ListDictionary rule
End If
Next
End Sub
'
' List the content of the link-translation dictionary for the
' specified Web publishing rule.
'
Sub ListDictionary(wpRule)
Dim vpSets ' An FPCVendorParametersSets collection
Dim vpSet ' An FPCVendorParametersSet object
Dim errorCode, errorDescript, index, name
Set vpSets = wpRule.VendorParametersSets
On Error Resume Next
Set vpSet = vpSets(LinkTranslatDicGUID)
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case Error_FileNotFound:
WScript.Echo "The dictionary for the " & wpRule.Name _
& " rule is empty or does not exist."
Case 0:
' A dictionary exists for this rule.
WScript.Echo "Dictionary for the " & wpRule.Name & " rule:"
index = 1
If(IsEmpty(vpSet.AllNames)) Then
WScript.Echo " The dictionary is empty."
Else
For Each name In vpSet.AllNames
WScript.Echo " " & index & ". " & name & " - " & _
vpSet.Value(name)
index = index + 1
Next
End If
Case Else:
err.Raise errorCode,, errorDescript
End Select
End Sub
'
' Remove the vendor parameters set defining the link-translation dictionary
' of the specified Web publishing rule.
'
Sub ClearDictionary(wpRule)
Dim vpSets ' An FPCVendorParametersSets collection
Set vpSets = wpRule.VendorParametersSets
RemoveFromVPSs vpSets, LinkTranslatDicGUID
vpSets.Save
End Sub
'
' Remove a single entry from the dictionary (The entry name is the internal
' string).
'
Sub RemoveEntry(wpRule, name)
Dim vpSets ' An FPCVendorParametersSets collection
Dim vpSet ' An FPCVendorParametersSet object
Dim errorCode, errorDescript
' Get the vendor parameters set defining the link-translation dictionary.
Set vpSets = wpRule.VendorParametersSets
On Error Resume Next
Set vpSet = vpSets(LinkTranslatDicGUID)
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case Error_FileNotFound:
WScript.Echo "No dictionary exists for this rule."
Exit Sub
Case 0:
' OK
Case Else
err.Raise errorCode,, errorDescript
End Select
' Remove the specified entry.
' Note: The key is case-sensitive.
On Error Resume Next
vpSet.RemoveValue name
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case Error_FileNotFound:
WScript.Echo "An entry for " & name _
& " was not found in the dictionary."
Case 0:
vpSet.Save ' OK, save the changes.
Case Else
err.Raise errorCode,, errorDescript
End Select
End Sub
'
' Add an entry (internal string - external string) to the link-translation
' dictionary of the specified rule.
'
Sub AddItemToDictionary(wpRule, internalString, externalString)
Dim vpSets ' An FPCVendorParametersSets collection
Dim vpSet ' An FPCVendorParametersSet object
Dim errorCode, errorDescript
Set vpSets = wpRule.VendorParametersSets
On Error Resume Next
Set vpSet = vpSets(LinkTranslatDicGUID)
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case Error_FileNotFound:
' Create the dictionary if it does not exist.
Set vpSet = vpSets.Add(LinkTranslatDicGUID, False)
Case 0:
' OK, set was found.
Case Else
err.Raise errorCode,, errorDescript
End Select
' Add the internal-external entry.
vpSet.Value(internalString) = externalString
vpSets.Save
End Sub
'
' Retrieve the specified Web publishing rule.
'
Function GetWebPublishingRule(ruleName)
Dim rules ' An FPCPolicyRules collection
Dim rule ' An FPCPolicyRule object
Dim errorCode, errorDescript
Set rules = root.GetContainingArray.ArrayPolicy.PolicyRules
On Error Resume Next
Set rule = rules(ruleName)
Select Case err.Number
Case Error_FileNotFound:
WScript.Echo "The " & ruleName _
& " Web publishing rule was not found."
Wscript.Quit
Case 0:
' OK
Case Else
err.Raise err.Number,, err.Description
End Select
On Error GoTo 0
If rule.Type <> fpcPolicyRuleWebPublishing Then
WScript.Echo "The " & ruleName & " rule is not a Web publishing rule."
Wscript.Quit
End If
Set GetWebPublishingRule = rule
End Function
'
' Remove the link-translation dictionary from the vendor parameters sets
' collection of the specified rule.
'
Sub RemoveFromVPSs(vpSets, setName)
Dim errorCode, errorDescript
On Error Resume Next
vpSets.Remove setName
errorCode = err.Number
errorDescript = err.Description
On Error GoTo 0
Select Case errorCode
Case 0:
vpSets.Save ' OK, save the changes.
Case Error_FileNotFound:
' Ignore the error if the object was not found
' or was already removed.
Case Else
err.raise errorCode,,errorDescript
End Select
End Sub
Sub Usage()
Dim sUsage
sUsage = "Usage:" & vbCrLf _
& " LinkTranslation_EditDictionary.vbs Action [RuleName] [IntString]" _
& " [ExtString]" & vbCrLf _
& vbCrLf _
& " Action:" & vbCrLf _
& " ListAll - List dictionaries for all Web publishing" _
& " rules." & vbCrLf _
& " List - List dictionary for the specified rule." _
& vbCrLf _
& " Clear - Clear all entries from the search-replace" _
& " dictionary for the specified rule." & vbCrLf _
& " Add - Add an entry (internal string - external" _
& " string) to the dictionary of the specified rule." _
& vbCrLf _
& " RemoveEntry - Remove the entry for the specified internal" _
& " string from the dictionary of the specified rule." _
& vbCrLf _
& vbCrLf _
& " RuleName: Specify the Web publishing rule. " & vbCrLf
WScript.Echo sUsage
WScript.Quit
End Sub