Solved

PowerShell Active Directory. Null out custom  attributes.

Posted on 2015-01-30
32
273 Views
Last Modified: 2016-06-23
Looking to $null out custom user AD attribute "CookieMonster" in powershell for every user in AD.

First I would like to pull all the users "CookieMonster" attribute. Second based of the results $Null out the results that contain anything besides $Null.

This needs to be native tools only, and not Quest tools QAD etc.
0
Comment
Question by:Xytras1
  • 9
  • 9
  • 6
  • +1
32 Comments
 
LVL 68

Expert Comment

by:Qlemo
ID: 40580005
import-module ActiveDirectory
Get-ADUser -Filter { CookieMonster -ne '' } -Property CookieMonster | Set-ADUser -Clear CookieMonster -whatIf

Open in new window

This is in test mode because of -whatif, so doesn't perform changes.
0
 

Author Comment

by:Xytras1
ID: 40580198
Qlemo,

Wish it was that easy. Get-ADUser does not pull custom attributes.
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40580223
It does. You just need to name them or use a * with -Property. If the attribute is part of the AD schema, you can retrieve it.
0
 

Author Comment

by:Xytras1
ID: 40580256
Ok. Screenshoot shows a custom attribute called zyloc-accountdisplay as highlighted. Did a Get-ADuser -property * | GM | Out-file C:\temp\customattribute.txt to show properties. This does not show custom attributes.

CustomAttribute.PNG
Text in customattribute1.txt


   TypeName: Microsoft.ActiveDirectory.Management.ADUser

Name                               MemberType            Definition                                                                                                                        
----                               ----------            ----------                                                                                                                        
Contains                           Method                bool Contains(string propertyName)                                                                                                
Equals                             Method                bool Equals(System.Object obj)                                                                                                    
GetEnumerator                      Method                System.Collections.IDictionaryEnumerator GetEnumerator()                                                                          
GetHashCode                        Method                int GetHashCode()                                                                                                                  
GetType                            Method                type GetType()                                                                                                                    
ToString                           Method                string ToString()                                                                                                                  
Item                               ParameterizedProperty Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Item(string propertyName) {get;}                                    
AccountExpirationDate              Property              System.DateTime AccountExpirationDate {get;set;}                                                                                  
accountExpires                     Property              System.Int64 accountExpires {get;set;}                                                                                            
AccountLockoutTime                 Property              System.DateTime AccountLockoutTime {get;set;}                                                                                      
AccountNotDelegated                Property              System.Boolean AccountNotDelegated {get;set;}                                                                                      
AllowReversiblePasswordEncryption  Property              System.Boolean AllowReversiblePasswordEncryption {get;set;}                                                                        
BadLogonCount                      Property              System.Int32 BadLogonCount {get;}                                                                                                  
badPasswordTime                    Property              System.Int64 badPasswordTime {get;set;}                                                                                            
badPwdCount                        Property              System.Int32 badPwdCount {get;set;}                                                                                                
CannotChangePassword               Property              System.Boolean CannotChangePassword {get;set;}                                                                                    
CanonicalName                      Property              System.String CanonicalName {get;}                                                                                                
Certificates                       Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection Certificates {get;set;}                                            
City                               Property              System.String City {get;set;}                                                                                                      
CN                                 Property              System.String CN {get;}                                                                                                            
codePage                           Property              System.Int32 codePage {get;set;}                                                                                                  
Company                            Property              System.String Company {get;set;}                                                                                                  
Country                            Property              System.String Country {get;set;}                                                                                                  
countryCode                        Property              System.Int32 countryCode {get;set;}                                                                                                
Created                            Property              System.DateTime Created {get;}                                                                                                    
createTimeStamp                    Property              System.DateTime createTimeStamp {get;}                                                                                            
Deleted                            Property              System.Boolean Deleted {get;}                                                                                                      
Department                         Property              System.String Department {get;set;}                                                                                                
Description                        Property              System.String Description {get;set;}                                                                                              
DisplayName                        Property              System.String DisplayName {get;set;}                                                                                              
DistinguishedName                  Property              System.String DistinguishedName {get;set;}                                                                                        
Division                           Property              System.String Division {get;set;}                                                                                                  
DoesNotRequirePreAuth              Property              System.Boolean DoesNotRequirePreAuth {get;set;}                                                                                    
dSCorePropagationData              Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection dSCorePropagationData {get;}                                        
EmailAddress                       Property              System.String EmailAddress {get;set;}                                                                                              
EmployeeID                         Property              System.String EmployeeID {get;set;}                                                                                                
EmployeeNumber                     Property              System.String EmployeeNumber {get;set;}                                                                                            
Enabled                            Property              System.Boolean Enabled {get;set;}                                                                                                  
Fax                                Property              System.String Fax {get;set;}                                                                                                      
GivenName                          Property              System.String GivenName {get;set;}                                                                                                
HomeDirectory                      Property              System.String HomeDirectory {get;set;}                                                                                            
HomedirRequired                    Property              System.Boolean HomedirRequired {get;set;}                                                                                          
HomeDrive                          Property              System.String HomeDrive {get;set;}                                                                                                
HomePage                           Property              System.String HomePage {get;set;}                                                                                                  
HomePhone                          Property              System.String HomePhone {get;set;}                                                                                                
info                               Property              System.String info {get;set;}                                                                                                      
Initials                           Property              System.String Initials {get;set;}                                                                                                  
instanceType                       Property              System.Int32 instanceType {get;}                                                                                                  
isDeleted                          Property              System.Boolean isDeleted {get;}                                                                                                    
kpMailboxAddresses                 Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection kpMailboxAddresses {get;set;}                                      
kpsmtpOriginator                   Property              System.String kpsmtpOriginator {get;set;}                                                                                          
kpsmtpRecipient                    Property              System.String kpsmtpRecipient {get;set;}                                                                                          
l                                  Property              System.String l {get;set;}                                                                                                        
LastBadPasswordAttempt             Property              System.DateTime LastBadPasswordAttempt {get;}                                                                                      
LastKnownParent                    Property              System.String LastKnownParent {get;}                                                                                              
lastLogon                          Property              System.Int64 lastLogon {get;set;}                                                                                                  
LastLogonDate                      Property              System.DateTime LastLogonDate {get;}                                                                                              
lastLogonTimestamp                 Property              System.Int64 lastLogonTimestamp {get;set;}                                                                                        
LockedOut                          Property              System.Boolean LockedOut {get;set;}                                                                                                
lockoutTime                        Property              System.Int64 lockoutTime {get;set;}                                                                                                
logonCount                         Property              System.Int32 logonCount {get;set;}                                                                                                
LogonWorkstations                  Property              System.String LogonWorkstations {get;set;}                                                                                        
mail                               Property              System.String mail {get;set;}                                                                                                      
Manager                            Property              System.String Manager {get;set;}                                                                                                  
MemberOf                           Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection MemberOf {get;}                                                    
MNSLogonAccount                    Property              System.Boolean MNSLogonAccount {get;set;}                                                                                          
MobilePhone                        Property              System.String MobilePhone {get;set;}                                                                                              
Modified                           Property              System.DateTime Modified {get;}                                                                                                    
modifyTimeStamp                    Property              System.DateTime modifyTimeStamp {get;}                                                                                            
msDS-User-Account-Control-Computed Property              System.Int32 msDS-User-Account-Control-Computed {get;}                                                                            
Name                               Property              System.String Name {get;}                                                                                                          
nTSecurityDescriptor               Property              System.DirectoryServices.ActiveDirectorySecurity nTSecurityDescriptor {get;set;}                                                  
ObjectCategory                     Property              System.String ObjectCategory {get;}                                                                                                
ObjectClass                        Property              System.String ObjectClass {get;set;}                                                                                              
ObjectGUID                         Property              System.Nullable`1[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] ObjectGUID {get;set;}
objectSid                          Property              System.Security.Principal.SecurityIdentifier objectSid {get;}                                                                      
Office                             Property              System.String Office {get;set;}                                                                                                    
OfficePhone                        Property              System.String OfficePhone {get;set;}                                                                                              
Organization                       Property              System.String Organization {get;set;}                                                                                              
OtherName                          Property              System.String OtherName {get;set;}                                                                                                
PasswordExpired                    Property              System.Boolean PasswordExpired {get;set;}                                                                                          
PasswordLastSet                    Property              System.DateTime PasswordLastSet {get;set;}                                                                                        
PasswordNeverExpires               Property              System.Boolean PasswordNeverExpires {get;set;}                                                                                    
PasswordNotRequired                Property              System.Boolean PasswordNotRequired {get;set;}                                                                                      
POBox                              Property              System.String POBox {get;set;}                                                                                                    
PostalCode                         Property              System.String PostalCode {get;set;}                                                                                                
PrimaryGroup                       Property              System.String PrimaryGroup {get;}                                                                                                  
primaryGroupID                     Property              System.Int32 primaryGroupID {get;set;}                                                                                            
ProfilePath                        Property              System.String ProfilePath {get;set;}                                                                                              
ProtectedFromAccidentalDeletion    Property              System.Boolean ProtectedFromAccidentalDeletion {get;set;}                                                                          
PSShowComputerName                 Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection PSShowComputerName {get;set;}                                      
pwdLastSet                         Property              System.Int64 pwdLastSet {get;set;}                                                                                                
SamAccountName                     Property              System.String SamAccountName {get;set;}                                                                                            
sAMAccountType                     Property              System.Int32 sAMAccountType {get;set;}                                                                                            
ScriptPath                         Property              System.String ScriptPath {get;set;}                                                                                                
sDRightsEffective                  Property              System.Int32 sDRightsEffective {get;}                                                                                              
ServicePrincipalNames              Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection ServicePrincipalNames {get;set;}                                    
SID                                Property              System.Security.Principal.SecurityIdentifier SID {get;set;}                                                                        
SIDHistory                         Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection SIDHistory {get;}                                                  
SmartcardLogonRequired             Property              System.Boolean SmartcardLogonRequired {get;set;}                                                                                  
sn                                 Property              System.String sn {get;set;}                                                                                                        
st                                 Property              System.String st {get;set;}                                                                                                        
State                              Property              System.String State {get;set;}                                                                                                    
StreetAddress                      Property              System.String StreetAddress {get;set;}                                                                                            
Surname                            Property              System.String Surname {get;set;}                                                                                                  
telephoneNumber                    Property              System.String telephoneNumber {get;set;}                                                                                          
Title                              Property              System.String Title {get;set;}                                                                                                    
TrustedForDelegation               Property              System.Boolean TrustedForDelegation {get;set;}                                                                                    
TrustedToAuthForDelegation         Property              System.Boolean TrustedToAuthForDelegation {get;set;}                                                                              
UseDESKeyOnly                      Property              System.Boolean UseDESKeyOnly {get;set;}                                                                                            
userAccountControl                 Property              System.Int32 userAccountControl {get;set;}                                                                                        
userCertificate                    Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection userCertificate {get;set;}                                          
userParameters                     Property              System.String userParameters {get;set;}                                                                                            
UserPrincipalName                  Property              System.String UserPrincipalName {get;set;}                                                                                        
uSNChanged                         Property              System.Int64 uSNChanged {get;}                                                                                                    
uSNCreated                         Property              System.Int64 uSNCreated {get;}                                                                                                    
whenChanged                        Property              System.DateTime whenChanged {get;}                                                                                                
whenCreated                        Property              System.DateTime whenCreated {get;}                                                                                                
WriteDebugStream                   Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection WriteDebugStream {get;set;}                                        
WriteErrorStream                   Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection WriteErrorStream {get;set;}                                        
WriteVerboseStream                 Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection WriteVerboseStream {get;set;}                                      
WriteWarningStream                 Property              Microsoft.ActiveDirectory.Management.ADPropertyValueCollection WriteWarningStream {get;set;}
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40580287
Limit to that user only for testing:
Get-ADuser RSAccount -property xyloc* | fl *

Open in new window

The issue with GM is that is can only show the members of the very first object.
0
 

Author Comment

by:Xytras1
ID: 40580446
Tried. Get-ADuser RSAccount -property xyloc* | fl *
There are 29 Attributes that have xyloc* in it, I counted them manually.

custom3.PNG
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40580497
And the one you search for is not there?
0
 

Author Comment

by:Xytras1
ID: 40580557
Qlemo,

None are there. I don't think Get-ADUser has the ability to display custom attributes. I know the Quest tools do, but I can not use those.
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40580572
Misunderstood your prior post, sorry.
It's strange, because I never had issues with custom attributes.
0
 
LVL 39

Expert Comment

by:footech
ID: 40580771
In my experience, specifying -properties with a partialname and wildcard never works.  Try
Get-ADuser RSAccount -properties xyloc-accountdisplay | fl *

Open in new window

0
 

Author Comment

by:Xytras1
ID: 40580778
This does not pull that attribute for me either.
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40580838
The wildcard worked for my non-standard attributes.
0
 
LVL 39

Expert Comment

by:footech
ID: 40580914
I created a custom attribute called "xTest1" in a test environment.  Here are my results.  My second query worked.  This is with PS 2.0.  Perhaps the reason the first query worked for Qlemo is due to PS version.  My previous results were from PS 3.0.
PS C:\Users\Administrator> get-aduser user3 -properties x*


DistinguishedName : CN=user3,CN=Users,DC=temptrust,DC=com
Enabled           : True
GivenName         : user3
Name              : user3
ObjectClass       : user
ObjectGUID        : bf4161cd-f640-4c40-abb2-376e1b9fa7ee
SamAccountName    : user3
SID               : S-1-5-21-1691528761-768032357-1489659215-1109
Surname           :
UserPrincipalName : user3@temptrust.com



PS C:\Users\Administrator> get-aduser user3 -properties xtest1


DistinguishedName : CN=user3,CN=Users,DC=temptrust,DC=com
Enabled           : True
GivenName         : user3
Name              : user3
ObjectClass       : user
ObjectGUID        : bf4161cd-f640-4c40-abb2-376e1b9fa7ee
SamAccountName    : user3
SID               : S-1-5-21-1691528761-768032357-1489659215-1109
Surname           :
UserPrincipalName : user3@temptrust.com
xtest1            : cheese

Open in new window

0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40581354
No clue why, but it doesn't work for me either, no matter if using PS2 or 4.
According to http:#a40580778 we cannot expect
Get-ADuser RSAccount -property * | fl xyloc*

Open in new window

to report anything custom either ...
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 39

Expert Comment

by:footech
ID: 40581869
I'll mention the other odd behavior that I've seen from Get-ADUser, just in case it stimulates any ideas.

I've seen where it didn't return all properties (some properties were returned correctly, others were returned as blank), when run on a DC (2008R2) from a non-elevated prompt.  Starting an elevated prompt and running the same query returned the properties.  In another instance, even running an elevated prompt didn't return all the properties, but what did work was to use the -server parameter to point to another DC.  I've never run into any issue when running a command from my workstation with RSAT installed.
0
 

Author Comment

by:Xytras1
ID: 40584215
I can not get it to display with Admin or normal user on just a workstations with RSAT PS3.0. I also can not get it to display directly on the DC 2008R2 PowerShell 2.0.
0
 
LVL 39

Accepted Solution

by:
footech earned 250 total points
ID: 40584387
Sorry, I'm out of ideas as to why it would work for me but not you.

You can try using ADSI.
([ADSISearcher]"(&(objectCategory=person)(objectClass=user))").FindAll() |
 % {$user = ([adsi]$_.Path)
 $user.PutEx(1,"CookieMonster",$null)
 $user.SetInfo()
}

Open in new window

0
 

Author Comment

by:Xytras1
ID: 40584589
([ADSISearcher]"(&(objectCategory=person)(objectClass=user))").FindAll() |
 % {$user = ([adsi]$_.Path)
 $user.PutEx(1,"CookieMonster",$null)
 $user.SetInfo()
}

Does not work either..
0
 
LVL 39

Expert Comment

by:footech
ID: 40584705
In my testing that script finds all users and clears out the named attribute (tested it with the custom attribute I had created).
I'm at a loss as to why everything that works for me doesn't work for you.  Are you running as domain admin?

Whether a query returns the value or not, I would think the clearing of the attribute would still work.  So either my last command or a slight modification to Qlemo's should clear all users.
Get-ADUser -Filter * | Set-ADUser -Clear CookieMonster

Open in new window

0
 

Author Comment

by:Xytras1
ID: 40584833
I can read the custom attribute via Quest Tools Get-QADUser and set the custom attribute with Set-QADUser.... Just can not do it with native tools. It's driving me crazy too.

Side note. I can read/modify this custom attribute with my admin account on the DC via dsa.msc.
0
 
LVL 39

Expert Comment

by:footech
ID: 40584956
Maybe something with your schema, but I don't have any more ideas.
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 40613707
I too cannot extract custom attributes using wildcards (explicit names works just fine). The AD gateway server here is 2012, with Windows 7 on the client side. I'd expect the web service gateway to do the significant work, including generating a real property list from a wildcard.

It would be entirely possible to work around it be generating a query against the schema to resolve wildcards to ldapDisplayNames. Bit of a bodge though.

Anyway, I'm a bit curious about your ADSI example. It won't work particularly well if you don't do the PutEx inside the loop. That is, if you ran the code as-is it would only set the attribute for the very last user it found.

Chris
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 40613730
Chris, the PutEx is inside the loop!?
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 40613779
Oh wow my eyes aren't working well today. So it is. Sorry!

I haven't had a problem setting custom attributes using ADSI myself, is it returning an error message when you run it?

Chris
0
 

Author Comment

by:Xytras1
ID: 40615434
I don't get an error, I just get nothing.
0
 
LVL 70

Assisted Solution

by:Chris Dent
Chris Dent earned 250 total points
ID: 40616021
That would normally indicate success, positive reporting isn't really a feature of ADSI. But you find the attribute value has not changed?

Have you tried to immediately get the attribute value to confirm?

We could do this:
([ADSISearcher]"(&(objectCategory=person)(objectClass=user))").FindAll() |
 ForEach-Object {
  # The property name must be lower case when accessing it on a PropertyResultCollection like this.
  Write-Host "CookieMonster: $($_.Properties['cookiemonster'][0])"

  $user = $_.GetDirectoryEntry()
  $user.PutEx(1,"CookieMonster",$null)
  $user.SetInfo()

  # Make sure we get an updated object.
  $user = $_.GetDirectoryEntry()
  Write-Host "CookieMonster: $($user.Get('CookieMonster'))"
}

Open in new window

The last line will error when it fails to find the property on the directory entry.  Taking advantage of the DCLocator a bit here, replication shouldn't get a look in because all three operations should execute against the same domain controller.

Chris
0
 
LVL 68

Expert Comment

by:Qlemo
ID: 41660646
We don't know for sure whether Chris' https:#a40616021 works for the OP, but if it does, footech's https:#a40584387 is the answer, and https:#a40616021 an assist only.
0
 
LVL 70

Expert Comment

by:Chris Dent
ID: 41660652
Agreed. Credit should go to footech if it's deemed to be worthwhile.

Chris
0

Featured Post

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

In this previous article (https://oddytee.wordpress.com/2016/05/05/provision-new-office-365-user-and-mailbox-from-exchange-hybrid-via-powershell/), we made basic license assignments to users in O365. When I say basic, the method is the simplest way …
I thought I'd write this up for anyone who has a request to create an anonymous whistle-blower-type submission form created using SharePoint 2010 (this would probably work the same for 2013). It's not 100% fool-proof but it's as close as you can get…
This tutorial will walk an individual through the process of transferring the five major, necessary Active Directory Roles, commonly referred to as the FSMO roles from a Windows Server 2008 domain controller to a Windows Server 2012 domain controlle…
This tutorial will walk an individual through the process of configuring their Windows Server 2012 domain controller to synchronize its time with a trusted, external resource. Use Google, Bing, or other preferred search engine to locate trusted NTP …

757 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now