使用XSL在AD组上进行匹配

时间:2017-01-18 21:55:17

标签: xslt

好的,我对XSL一无所知。我想遍历用户成员并做一些事情,如果没有匹配,那么做其他事情。我有以下哪种工作适用于我们的传真系统。当AD组中的用户获得系统中的委派权限时。这是版本1.0。

我希望我正确添加了代码

<?xml version="1.0"?>
<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:rf="urn:rightfax-sync-schema"
xmlns="urn:rightfax-sync-schema"
exclude-result-prefixes="rf"
version="1.0">
<xsl:output method="xml" indent="yes"/>

<!-- Copy all nodes and attributes. -->
<xsl:template match="/ | @* | node()">
<xsl:copy>
  <xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

  <!-- "userID" is a required attribute -->
  <xsl:template match="rf:attr[@name='sAMAccountName']">
    <attr name="UserID">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='objectSid']">
    <attr name="AssociatedNTAccountSID">
      <xsl:apply-templates select="*"/>
    </attr>
    <attr name="RequiresNTAuth">
      <value>True</value>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='company']">
    <attr name="ToCompany">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='facsimileTelephoneNumber']">
    <!-- Commented out because AD users have the same fax number assigned to multiple users <attr name="RouteCode">
      <value>
         Get the last 4 digits of fax number, ignoring various special characters that might
         be found in phone numbers.  If result is Not a Number then use default route code instead.
         <xsl:variable name="cleanNumber" select="translate(node(), ' .-,()', '')"/>
         <xsl:variable name="routecode" select="substring($cleanNumber, string-length($cleanNumber)-6, 7)"/>
         <xsl:choose>
            <xsl:when test="string(number($routecode))='NaN'">100</xsl:when>
            <xsl:otherwise><xsl:value-of select="$routecode"/></xsl:otherwise>
         </xsl:choose>
      </value>
    </attr> -->
    <attr name="PersonalFaxNum">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='l']">
    <attr name="ToCityState">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='name']">
    <attr name="UserName">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='otherFacsimileTelephoneNumber']">
    <attr name="GeneralFaxNum">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='otherTelephone']">
    <attr name="GeneralVoiceNum">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='telephoneNumber']">
    <attr name="PersonalVoiceNum">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='memberOf']">
    <attr name="GroupID">
        <xsl:for-each select='*'>
            <xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'"/>
            <xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
            <xsl:variable name="tmpVar" select="substring-after(node(), '=')"/>
            <xsl:variable name="groupName" select="translate(substring-before(substring-after(node(), '='), ','), $uppercase, $smallcase)"/>
             <xsl:choose>
                <xsl:when test="string($groupName)='OT_group1_delegates'"><value>9</value></xsl:when>
                <xsl:when test="string($groupName)='OT_group2_delegates'"><value>11</value></xsl:when>

                <xsl:otherwise><value>1</value></xsl:otherwise>

             </xsl:choose>  
        </xsl:for-each>
    </attr>
  </xsl:template>

  <xsl:template match="rf:attr[@name='legacyExchangeDN']">
  </xsl:template>



  <xsl:template match="rf:attr[@name='msExchVoiceMailboxID']">
    <attr name="BigVoiceMailSubscriberID">
      <xsl:apply-templates select="*"/>
    </attr>
  </xsl:template>



<xsl:template match="rf:attr[@name='mail']">
    <attr name="EmailAddress">
      <xsl:apply-templates select="*"/>
    </attr>
    <attr name="RouteInfo">
      <xsl:apply-templates select="*"/>
    </attr>
    <!-- Commented out to force routing from default user<attr name="RouteType">
      <value>11</value> Exchange = 11
    </attr> -->
    <attr name="NotifyInfo">
      <xsl:apply-templates select="*"/>
    </attr>
    <attr name="NotifyType">
      <!-- Exchange = 17, SMTP = 18 -->
      <value>18</value>
    </attr>
    <attr name="RouteFormat">
      <value>2</value> <!-- TIFF = 2 -->
    </attr>
  </xsl:template>

</xsl:stylesheet>

所以,如果我注意到其他行,那么它运行正常。如果用户位于其中一个OT组中,则他们将获得委派权限。但是,如果我取消标记其他行,它将添加它们,然后由于&lt; 1&gt;而删除它们。有没有办法说如果用户不在其中一个AD组中,那么不这样做呢?有点像一次匹配一次?

理想情况下,它也只会查找以OT_开头的AD组,因为用户可能有几十个组。

希望这是有道理的。

0 个答案:

没有答案