在 Microsoft Identity Manager (MIM) 2016 中,函数允许你在将属性值流向函数活动或声明性预配中的目标之前修改属性值。 本文档的目的是概述可用的函数,并说明如何使用它们。
配置属性流映射是配置同步规则时的基本任务。 属性流映射的最简单形式是直接映射。 如名称所示,直接映射采用源属性的值,并将其应用于配置的目标属性。 在某些情况下,需要修改现有属性值,或者在系统将其应用到目标之前计算新的属性值。
函数是一种内置方法,用于定义在为目标生成属性值时需要应用同步引擎的修改类型。
MIM 函数分布到以下类别:
数据作:对字符串执行各种作。
数据检索:从属性值中提取数据。
数据生成:生成值。
逻辑:根据条件执行作。
以下部分提供有关每个类别中的函数的更多详细信息。
数据作函数
数据作函数用于对字符串执行各种作作。
Concatenate |
详细信息 |
说明 |
连接函数连接两个或多个字符串。 |
函数签名 |
string1 + string2... |
输入 |
两个或多个字符串。 |
运营 |
所有输入字符串参数都相互连接。 |
输出 |
一个字符串。 |
大写 |
详细信息 |
说明 |
大写函数将字符串中的所有字符转换为大写。 |
函数签名 |
String UpperCase(string) |
输入 |
一个字符串。 |
运营 |
输入参数的所有小写字符都转换为大写字符。 例如: UpperCase("test") 结果为 "TEST" . |
输出 |
一个字符串。 |
小写 |
详细信息 |
说明 |
LowerCase 函数将字符串中的所有字符转换为小写。 |
函数签名 |
String LowerCase(string) |
输入 |
一个字符串。 |
运营 |
输入参数的所有大写字符都转换为小写字符。 例如: LowerCase("TeSt") 结果为 "test" . |
输出 |
一个字符串。 |
ProperCase |
详细信息 |
说明 |
ProperCase 函数将字符串中每个空格分隔的单词的第一个字符转换为大写。 所有其他字符都转换为小写。 |
函数签名 |
String ProperCase(string) |
输入 |
一个字符串。 |
运营 |
输入参数中每个空格分隔的单词的第一个字符将转换为大写。 所有大写字符都转换为小写字符。 如果输入参数中的单词以非字母字符开头,则单词的第一个字符不会转换为大写。 例如:-
ProperCase("TEsT") 结果为 "Test" . -
ProperCase("britta simon") 结果为 "Britta Simon" . -
ProperCase(" TEsT") 结果为 " Test" . -
ProperCase("\$TEsT") 结果为 "\$Test" .
|
输出 |
一个字符串。 |
LTrim |
详细信息 |
说明 |
LTrim 函数从字符串中删除前导空格。 |
函数签名 |
String LTrim(string) |
输入 |
一个字符串。 |
运营 |
删除输入参数中包含的前导空格字符。 例如: LTrim(" Test ") 结果为 "Test " . |
输出 |
一个字符串。 |
RTrim |
详细信息 |
说明 |
RTrim 函数从字符串中删除尾随空格。 |
函数签名 |
String RTrim(string) |
输入 |
一个字符串。 |
运营 |
将删除输入参数中包含的尾随空格字符。 例如: RTrim(" Test ") 结果为 " Test" . |
输出 |
一个字符串。 |
修剪 |
详细信息 |
说明 |
Trim 函数从字符串中删除前导空格和尾随空格。 |
函数签名 |
String Trim(string) |
输入 |
一个字符串。 |
运营 |
删除字符串中包含的前导和尾随空格字符。 例如: Trim(" Test ") 结果为 "Test" . |
输出 |
一个字符串。 |
|
|
RightPad |
详细信息 |
说明 |
RightPad 函数使用提供的填充字符将字符串右填充到指定的长度。 |
函数签名 |
String RightPad(string, length, padCharacter) |
输入 |
-
string:要填充的字符串。
-
length:表示字符串所需长度的整数。
-
padCharacter:一个字符串,由要用作填充字符的单个字符组成。
|
运营 |
如果 字符串 长度小于 长度,则 padCharacter 将重复追加到 字符串 末尾,直到 字符串 长度等于 长度。 例如:-
RightPad("User", 10, "0") 结果为 "User000000" . -
RightPad(RandomNum(1,10), 5, "0")
"9000" 可能导致 。
|
输出 |
如果 字符串 的长度大于或等于 长度,则返回与 字符串相同的字符串 。 如果 字符串 长度小于 长度,则返回所需长度的新字符串。 新字符串包含填充了 padCharacter 的字符串。 如果 字符串 为 null,则该函数返回一个空字符串。
注意: padCharacter 可以是空格字符,但它不能为 null 值。 如果字符串的长度等于或大于长度,则字符串将保持不变。 |
LeftPad |
详细信息 |
说明 |
LeftPad 函数使用提供的填充字符将字符串左垫到指定的长度。 |
函数签名 |
String LeftPad(string, length, padCharacter) |
输入 |
-
string:要填充的字符串。
-
length:表示字符串所需长度的整数。
-
padCharacter:一个字符串,由要用作填充字符的单个字符组成。
|
运营 |
如果 字符串 长度小于 长度,则 padCharacter 将重复追加到 字符串 的开头,直到 字符串 长度等于 长度。 例如:-
RightPad("User", 10, "0") 结果为 "000000User" . -
RightPad(RandomNum(1,10), 5, "0")
"0009" 可能导致 。
|
输出 |
如果 字符串 的长度大于或等于 长度,则返回与 字符串相同的字符串 。 如果 字符串 长度小于 长度,则返回所需长度的新字符串。 新字符串包含填充了 padCharacter 的字符串。 如果 字符串 为 null,则该函数返回一个空字符串。
注意: padCharacter 可以是空格字符,但它不能为 null 值。 如果字符串的长度等于或大于长度,则字符串将保持不变。 |
BitOr |
详细信息 |
说明 |
BitOr 函数将标志上的指定位设置为 1。 |
函数签名 |
Int BitOr(mask, flag) |
输入 |
-
mask:指定要在 标志上设置的位的十六进制值。
-
标志:要修改特定位的十六进制值。
|
运营 |
此函数将两个参数转换为二进制表示形式,并对其进行比较:- 如果 掩码 和 标志 中的一个或两个相应位为 1,则将位设置为 1。
- 如果两个相应位均为 0,则将位设置为 0。
- 在所有情况下返回 1,但两个参数的对应位为 0 除外。
- 生成的位模式是两个作数中的任何一个的“set”(1 或 true)位。
- 如果多个位具有掩码中的值 1,则可以设置多个标志位。
|
输出 |
新版 标志 , 掩码 中指定的位设置为 1。 |
BitAnd |
详细信息 |
说明 |
BitAnd 函数将标志上的指定位设置为 0。 |
函数签名 |
Int BitOr(mask, flag) |
输入 |
-
mask:指定要在 标志上修改的位的十六进制值。
-
标志:要修改特定位的十六进制值。
|
运营 |
此函数将两个参数转换为二进制表示形式,并对其进行比较:- 如果 掩码 和 标志 中的一个或两个相应位为 0,则将位设置为 0。
- 如果两个相应位均为 1,则设置一位为 1。
- 在所有情况下返回 0,但两个参数的对应位为 1 除外。
- 如果多个位具有掩码中的值 0,则可以将多个标志位设置为 0。
|
输出 |
新版 标志 , 掩码 中指定的位设置为 0。 |
DateTimeFormat |
详细信息 |
说明 |
DateTimeFormat 函数用于将字符串格式的 DateTime 格式设置为指定格式。 |
函数签名 |
String DateTimeFormat(dateTime, format) |
输入 |
-
dateTime:表示要设置格式的 DateTime 的字符串。
-
format:表示要转换为的格式的字符串。
注意:有关接受创建用户定义格式的字符,请参阅 用户定义的日期/时间格式。 |
运营 |
格式中指定的格式字符串将应用于 dateTime 字符串中的 DateTime。 以 格式 指定的字符串必须是有效的 DateTime 格式。 如果不是,则返回一个错误,指示格式不是有效的 DateTime 格式。 例如: DateTime("12/25/2007", "yyyy-MM-dd") 结果为 "2007-12-25" . |
输出 |
将 格式 应用于 dateTime 生成的字符串。 |
ConvertSidToString |
详细信息 |
说明 |
ConvertSidToString 将包含安全标识符的字节数组转换为字符串。 |
函数签名 |
String ConvertSidToString(ObjectSID) |
输入 |
ObjectSID:包含安全标识符(SID)的字节数组。 |
运营 |
指定的二进制 SID 转换为字符串。 |
输出 |
SID 的字符串表示形式。 |
ConvertStringToGuid |
详细信息 |
说明 |
ConvertStringToGuid 函数将 GUID 的字符串表示形式转换为 GUID 的二进制表示形式。 |
函数签名 |
Byte[] ConvertStringToGuid(stringGuid) |
输入 |
stringGuid:采用模式 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 格式的字符串,其中 GUID 的值以 8、4、4、4、4、4、4 和 12 位组的十六进制数字表示为一系列十六进制数字,并用连字符分隔。 返回值的一个示例是 382c74c3-721d-4f34-80e557657b6cbc27 。 |
运营 |
stringGuid 转换为其二进制表示形式。 如果字符串不是有效 GUID 的表示形式,该函数将拒绝参数,并显示错误“ConvertStringToGuid 函数的参数必须是表示有效 Guid 的字符串。 |
输出 |
GUID 的二进制表示形式。 |
ReplaceString |
详细信息 |
说明 |
ReplaceString 函数将字符串的所有匹配项都替换为另一个字符串。 |
函数签名 |
String ReplaceString(string, OldValue, NewValue) |
输入 |
-
string:要替换值的字符串。
-
OldValue:要搜索和替换的字符串。
-
NewValue:要替换的字符串。
|
运营 |
字符串中 OldValue 的所有匹配项都替换为 NewValue。 该函数必须能够处理 特殊字符\n. new line、 \r. 回车符和 \t. tab。 例如: ReplaceString("One\n\rMicrosoft\n\r\Way","\n\r"," ") 返回 "One Microsoft Way" 。 |
输出 |
一个字符串,其中包含替换为 NewValue 的字符串中的 OldValue 的所有匹配项。 |
数据检索函数
数据检索函数用于执行从字符串中检索所需字符的作。
字 |
详细信息 |
说明 |
基于描述要使用的分隔符与要返回的单词数的参数,Word 函数返回字符串中包含的单词。 |
函数签名 |
String Word(string, number, delimiters) |
输入 |
-
string:要从中返回单词的字符串。
-
数字:标识应返回的字号的数字。
-
分隔符:表示应用于标识单词的分隔符的字符串。
|
运营 |
字符串中由分隔符中的一个字符分隔的每个字符串都标识为一个单词。 如果 字符串 为 null,则该函数返回一个空字符串。 返回在 数字 中指定的位置找到的单词。 如果 数字< 1,该函数将返回一个空字符串。 例如:-
Word("Test;of%function;", 3, ";$&%") 返回 "function" 。 -
Word("Test;;Function" , 2 , ";") 返回值 "" (空字符串)。 -
Word("Test;of%function;", 0, ";$&%") 返回值 "" (空字符串)。
|
输出 |
一个字符串,其中包含用户请求的位置的单词。 如果 字符串 包含的单词 数小于单词数 ,或者 字符串 不包含 由分隔符 标识的任何单词,则返回空字符串。 |
左边 |
详细信息 |
说明 |
Left 函数从字符串的左侧(开头)返回指定的字符数。 |
函数签名 |
String Left(string, numChars) |
输入 |
-
string:要从中返回字符的字符串。
-
numChars:一个数字,标识要从字符串开头返回的字符数。
|
运营 |
从字符串的第一个位置返回 numChars 字符。 例如: Left("Britta Simon", 3) 返回 "Bri" 。 |
输出 |
包含字符串中的第一个 numChars 字符的 字符串。 如果 numChars = 0,则函数返回空字符串。 如果 为 numChars< 0,则函数将返回一个输入字符串。 如果 字符串 为 null,则该函数返回一个空字符串。 |
正确 |
详细信息 |
说明 |
Right 函数从字符串右侧(末尾)起返回指定的字符数。 |
函数签名 |
String Right(string, numChars) |
输入 |
-
string:要从中返回字符的字符串。
-
numChars:一个数字,用于标识要从字符串末尾返回的字符数。
|
运营 |
从字符串末尾返回 numChars 字符。 例如: Right("Britta Simon", 3) 返回 "mon" 。 |
输出 |
一个字符串,其中包含字符串中的最后一个 numChars 字符。 如果 numChars = 0,则函数返回空字符串。 如果 为 numChars< 0,则函数将返回一个输入字符串。 如果 字符串 为 null,则该函数返回一个空字符串。 如果 字符串 包含的字符数少于 numChars 中指定的数字,则返回 字符串 。 |
中间 |
详细信息 |
说明 |
Mid 函数从字符串指定位置起返回指定的字符数。 |
函数签名 |
String Mid(string, pos, numChars) |
输入 |
-
string:要从中返回字符的字符串。
-
pos:一个数字,用于标识用于返回字符的字符串中的起始位置。
-
numChars:一个数字,用于标识要从字符串中的位置返回的字符数。
|
运营 |
返回从字符串中的位置 pos 开始的 numChars 字符。 例如: Mid("Britta Simon", 3, 5) 返回 "itta " 。 |
输出 |
包含字符串中位置 pos 中的 numChars 字符的字符串。 如果 numChars = 0,则函数返回空字符串。 如果 为 numChars< 0,则函数返回一个空字符串。 如果为字符串的长度,>函数将返回一个输入字符串。 如果 pos<= 0,则函数返回输入字符串。 如果 字符串 为 null,则该函数返回一个空字符串。 如果位置 pos中没有字符串中剩余的 numChar 字符,则返回尽可能多的字符。 |
数据生成函数
数据生成函数用于生成特定数据类型的值。
CRLF |
详细信息 |
说明 |
CRLF 函数生成回车符/换行符。 使用此函数添加新行。 |
函数签名 |
String CRLF |
输入 |
没有。 |
运营 |
返回 CRLF。 例如:
AddressLine1 + CRLF() + AddressLine2 结果 AddressLine1
AddressLine2 。 |
输出 |
CRLF 是输出。 |
RandomNum |
详细信息 |
说明 |
RandomNum 函数在指定的间隔内返回一个随机数。 |
函数签名 |
Int RandomNum(start, end) |
输入 |
-
start:标识要生成的随机值的下限的数字。
-
end:标识要生成的随机值的上限的数字。
|
运营 |
将生成大于或等于 start 和 less 或 equal to end 的随机数。 例如: Random(0,999) 可能返回 100 。 |
输出 |
开始和结束指定的范围内的随机数。 |
EscapeDNComponent |
详细信息 |
说明 |
MIISUtils 中的 EscapeDNComponent 方法用于执行此作。 此方法根据所使用的管理代理类型(MA)处理输入字符串。 |
函数签名 |
String EscapeDNComponent(string) |
输入 |
string:用于处理可分辨名称的字符串。 字符串不应包含转义字符。 |
运营 |
不同的 MA 需要不同的可分辨名称格式。 此方法基于以下 MA 类型处理输入 字符串 :-
LDAP 可分辨名称:此 MA 类型的示例包括 Active Directory 域服务、Sun Directory 服务器(前 iPlanet Directory 服务器)和 Microsoft Exchange Server。
- 给定部分的值部分中的任何无效 XML 字符都经过十六进制编码。
- 给定部件的名称部分中的任何非法字符(包括无效的 XML 字符)都生成错误。
- 转义字符包括逗号(,)、等号(=)、加(+)、小于<()、大于(>)、数字(#)、分号(;)、反斜杠()和双引号()。
- 如果 字符串 中的最后一个字符是空格(),则转义该空格。
- 删除部件名称周围的任何多余的前导或尾随空格。
- 对于 XML MA,如果有多个部分,则按字母顺序排列这些部分。
- 如果指定了多个部分,则复合可分辨名称字符串是用加号(+)符号分隔的各个字符串的串联。
- 如果输入 字符串 不是格式正确的 LDAP 样式可分辨名称字符串,则会生成错误。
-
分层非 LDAP:此类型的 MA 示例Microsoft Lotus Notes。
- 此 MA 类型不支持多部分组件。
- 如果传递给
EscapeDNComponent 多个字符串,则会引发 ArgumentException 。 - 如果输入 字符串 中的任何字符都是无效的 XML 字符,则会引发 ArgumentException 。
- 将转义输入 字符串 中的所有逗号(,)和反斜杠(/)。
- 如果 字符串 中的最后一个字符是空格(),则转义该空格。
-
Extrinsic:此 MA 类型的示例包括没有 LDAP 可分辨名称的数据库或 XML。
- 如果任一部分是二进制或包含无效的 XML 字符,该部分将存储为原始数据的十六进制编码版本,其前缀为字符串前面的数字(#) 字符。 例如,如果某一部分
AxC (其中 x 表示非法的 XML 字符,如 0x10 ),该部分将编码为 #410010004300 。 否则,将转义这些字符的所有实例:反斜杠()、逗号(、加(+)和数字(#)。 - 如果给定部分字符串中的最后一个字符是空格(),则转义该空格。
- 如果指定了多个部分,则复合可分辨名称字符串是由加号分隔的所有单个字符串的串联。
|
输出 |
包含有效域名的字符串。 |
注释
对可分辨名称的验证比 LDAP 规范中定义的语法更严格。
EscapeDNComponent(String[])
允许部件名称包含一个或多个字符'a'-'z'、'A'-'Z'、'0'-'9'、'-'和'.'的任意组合。
不能使用此方法指定二进制部分。 但是,如果从定位点属性构造了可分辨名称,并且其中一个定位点属性是二进制类型,则 有可能在 CommitNewConnector 中具有二进制部分。
Null |
详细信息 |
说明 |
Null 函数用于指定 MA 没有要提供的属性,并且该属性优先级应继续执行下一个 MA。 |
函数签名 |
String Null |
输入 |
没有。 |
运营 |
返回 Null。 例如: IIF(Eq(domain), "unknown", Null()) 返回 Null 。 |
输出 |
Null 是输出。 |
逻辑函数
逻辑函数用于根据系统评估的条件执行作。
IIF |
详细信息 |
说明 |
IIF 函数基于指定的条件返回一组可能值中的其中一个值。 |
函数签名 |
Object IIF(condition, valueIfTrue, valueIfFalse) |
输入 |
-
条件:可计算为 true 或 false 的任何值或表达式。 以下函数可用作条件的 IIF 函数中的表达式 :
-
Eq:此函数比较两个相等参数。
-
NotEquals:此函数比较两个不相等的参数,如果它们不相等,则返回 true;如果它们相等,则返回 true。 例如:
NotEquals(EmployeeType, "Contractor") 。 -
LessThan:此函数比较两个数字,如果第一个数字小于第二个数字,则返回 true;否则返回 false。 例如:
LessThan(Salary, 100000) 。 -
GreaterThan:此函数比较两个数字,如果第一个数字大于第二个数字,则返回 true;否则返回 false。 例如:
GreaterThan(Salary, 100000) 。 -
LessThanOrEquals:此函数比较两个数字,如果第一个数字小于或等于第二个数字,则返回 true;否则返回 false。 例如:
LessThanOrEquals(Salary, 100000) 。 -
GreaterThanOrEquals:此函数比较两个数字,如果第一个数字大于或等于第二个数字,则返回 true;否则返回 false。 例如:
GreaterThanOrEquals(Salary, 100000) 。 -
IsPresent:此函数采用 ILM 架构中的属性输入,如果属性不为 null,则返回 true;如果属性为 null,则返回 false。
-
valueIfTrue:如果 条件 的计算结果为 true,则返回的值。
-
valueIfFalse:如果 条件 的计算结果为 false,则返回的值。
|
运营 |
如果 条件 的计算结果为 true,则函数返回 valueIfTrue。 否则,该函数返回 valueIfFalse。 例如: IIF(Eq(EmployeeType,"Intern"),"t-" + Alias, Alias) 如果用户是实习生,则返回添加到别名开头的“t-”的用户的别名。 否则,该函数将返回用户的别名 as-is。 |
输出 |
如果条件为 true,则输出为 valueIfTrue ;如果条件为 false,则 为 valueIfFalse 。 |