• Products
    • View all products
    • Free trials
  • Solutions
    • All Solutions
    • All Integrations
  • Resources
    • All Resources
    • Learning Hub
  • Trials
  • Support
    • Support Home
    • By Product
      • All Products
      • Active Roles
      • Authentication Services
      • Cloud Access Manager
      • Defender
      • Identity Manager
      • Password Manager
      • Safeguard
      • Starling Identity Analytics & Risk Intelligence
      • Starling Two-Factor Authentication
      • TPAM Appliance
    • Contact Support
      • Overview
      • Customer Service
      • Licensing Assistance
      • Renewal Assistance
      • Technical Support
    • Download Software
    • Knowledge Base
    • My Account
      • My Products
      • My Service Requests
      • My Licenses
      • My Groups
      • My Profile
    • Policies & Procedures
    • Professional Services
    • Technical Documentation
    • One Identity University
    • User Forums
    • Video Tutorials
  • Partners
    • Overview
    • Partner Circle Log In
    • Become a Partner
    • Find a Partner
    • Partner Community
  • Communities
    • Home
    • Blogs
      • Blogs A to Z
      • One Identity Community
      • AD Account Lifecycle Management
      • Cloud
      • Identity Governance & Administration
      • Privileged Access Management
      • syslog-ng Community
    • Forums
      • All Product Forums
      • Active Roles
      • Identity Manager
      • Password Manager
      • Safeguard
      • Unix Access Management
    • Social Networks
      • Facebook
      • LinkedIn
      • Twitter
      • YouTube
One Identity Community
One Identity Community
  • Site
  • User
  • Site
  • Search
  • User
Active Roles Community
Active Roles Community
Wiki Check unique value of an attribute
  • Forum
  • Ideas
  • Wiki
  • More
  • Cancel
  • New
  • -Active Roles Script Center
    • +Active Roles Script Policy Best Practices
    • Active Roles SDK
    • +C#
    • +JavaScript
    • +PowerShell
    • -VBScript
      • VBScript Library source code
      • -VBScript samples
        • A Managed Unit with users which have not logged on for last 90 days
        • Adjust the case of usernames to title case (first letter of each part of the name)
        • Advanced group creation/provision
        • Advanced shared folder creation
        • Bulk policy incompliance fixing
        • Check unique value of an attribute
        • +Computer management
        • +Exchange management
        • Function that converts regular date into integer8 format
        • Get effective policy info list
        • +Group management
        • How to find a request source in script policy
        • How to send emails based on scripts policy parameters and Virtual Attribute values
        • +Permissions Management
        • Policy incompliance reporting & fixing for specified policy
        • Populate values from a SQL database to an AD Attribute
        • Prevent copying an attribute on user copy
        • Prohibite a permission propagation to AD
        • Prohibite an AD native security editing
        • Read large integer date attributes and display them in date and time readable format
        • Read XML Node text or attribute value
        • Read XML Node with Children into DictionaryObject
        • Standalone script that requests built-in password generation policy
        • +User management
        • Validate moving operations
        • +VBScript: Approval

Check unique value of an attribute

DESCRIPTION

This script checks an attribute value, it ensures the value will be unique.


Note This code may use functions from the Active Roles Script Policy Best Practices. Please, follow the link to obtain instructions and code for those functions.


SCRIPT

'*********************************************************************************

' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND,

' EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED

' WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.

'

' IF YOU WANT THIS FUNCTIONALITY TO BE CONDITIONALLY SUPPORTED,

' PLEASE CONTACT ONE IDENTITY PROFESSIONAL SERVICES.

'*********************************************************************************

Option Explicit

Dim c_attrName: c_attrName = "initials"

Dim c_class: c_class = "user"

Dim c_filter: c_filter = "(objectClass=user)"

Function CheckUniqueExpression(value)

CheckUniqueExpression = "(&" & c_filter & "(" & c_attrName & "=" & value & "))"

End Function

Function ErrorMessage(value)

ErrorMessage = "The value of the '" & c_attrName & "' property must be unique."

End Function

Sub onCheckPropertyValues(Request)

If Not CheckUnique(Request) Then

Request.SetPolicyComplianceInfo c_attrName, EDS_POLICY_COMPLIANCE_ERROR, _

ErrorMessage(newValue)

End If

End Sub

Sub onPreCreate(Request)

If Not CheckUnique(Request) Then

Err.Raise 450, "CheckUnique", ErrorMessage(newValue)

End If

End Sub

Sub onPreModify(Request)

If Not CheckUnique(Request) Then

Err.Raise 450, "CheckUnique", ErrorMessage(newValue)

End If

End Sub

Function CheckUnique(Request)

CheckUnique = True

If Not (LCase(Request.Class) = LCase(c_class)) Then Exit Function

If Not IsAttributeModified(c_attrName, Request) Then Exit Function

Dim newValue: newValue = GetAttribute(c_attrName, Request)

If IsEmpty(newValue) Then Exit Function

Dim list: list = GetByExpression(CheckUniqueExpression(newValue))

If Count(list) = 0 Then

CheckUnique = True

ElseIf Count(list) = 1 And Request.ADsPath = list(LBound(list)) Then

CheckUnique = True

Else ' Count(list) > 1

CheckUnique = False

End If

End Function

Function GetByExpression(ByVal expression)

Dim command: Set command = GetAdodbCommand("CN=Active Directory", expression, "ADsPath", "subTree")

Dim rs: Set rs = command.Execute

Dim list()

Dim i: i = -1

Do Until rs.EOF Or i > 1

i = i + 1

ReDim Preserve list(i)

list(i) = CStr(rs.Fields("ADsPath").Value)

rs.MoveNext

Loop

GetByExpression = list

Set rs = Nothing

End Function

'------------------------------------------------------------------------------

Function GetAdodbConnection()

Dim adodbConnection: Set adodbConnection = CreateObject("ADODB.Connection")

adodbConnection.Provider = "ADsDSOObject"

adodbConnection.Properties("ADSI Flag") = 32768

adodbConnection.Open "DS Query", "", ""

Set GetAdodbConnection = adodbConnection

Set adodbConnection = Nothing

End Function

Function GetAdodbCommand(ByVal from, ByVal where, ByVal slect, ByVal scope)

Dim command: Set command = CreateObject("ADODB.Command")

command.ActiveConnection = GetAdodbConnection()

command.CommandText = "<EDMS://" & from & ">;" & where & ";" & slect & ";" & scope

Set GetAdodbCommand = command

Set command = Nothing

End Function

Function Count(arr)

Count = 0

On Error Resume Next

Count = UBound(arr) - LBound(arr) + 1

End Function

'------------------------------------------------------------------------------

Function IsAttributeModified (ByVal strAttributeName, ByRef Request)

IsAttributeModified = False

Dim objEntry: Set objEntry = Request.GetPropertyItem(strAttributeName, ADSTYPE_CASE_IGNORE_STRING)

If (objEntry Is Nothing) Then Exit Function

If (objEntry.ControlCode = 0) Then Exit Function

IsAttributeModified = True

End Function

Function GetAttribute (ByVal strAttributeName, ByRef Request)

GetAttribute = Empty

On Error Resume Next

GetAttribute = Request.Get(strAttributeName)

On Error GoTo 0

End Function

'***** END OF CODE ***************************************************************

  • Script Center
  • Script Center: VBScript
  • Share
  • History
  • More
  • Cancel
Related
Recommended
  • Company
    • About Us
    • Buy
    • Careers
    • Contact Us
    • News
  • Resources
    • Blogs
    • Customer Stories
    • Documents
    • Events
    • Videos
  • Support
    • Professional Services
    • Renew Support
    • Technical Support
    • One Identity University
    • Support Service
  • Social Networks
    • Facebook
    • Instagram
    • LinkedIn
    • Twitter
    • YouTube
  • © 2025 One Identity LLC. ALL RIGHTS RESERVED.
  • Legal
  • Terms of Use
  • Privacy
  • Community Feedback & Support
  • Cookie Preference Center