0

I want to clear multiple attributes by using variable in Powershell script (version 5.1.17763.1007)

It's work :

Set-ADUser -Identity $($user.SID) -Clear Initials,info

It's work also:

$emptyParams='Initials'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams

It's not work :

$emptyParams='Initials,info'
Set-ADUser -Identity $($user.SID) -Clear $emptyParams

and display :

Set-ADUser : The specified directory service attribute or value does not exist Parameter name: Initials,info At Set-ADUserDesc.ps1:32 char:9 + Set-ADUser -Identity $($user.SID) -Clear $emptyParams + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (S-1-5-21-414636...1575523350-2106:ADUser) [Set-ADUser], ArgumentException + FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.ArgumentException,Microsoft.ActiveDirectory.Management.Commands.SetADUser

Can you explain-me why ?

Best regards,

3

To directly answer your question of why the third method does not work:

There is no attribute by the name Initials,Info which is why the cmdlet fails. Your input (a string with a comma) is not the same as an array of strings.

The docmentation for the cmdlet Set-AdUser indicates that the -Clear attributes accepts an array of strings (or a single string, which would just be an array with a single element) as valid input:

 Set-ADUser
   ...
   [-Clear <String[]>]
   ...

Let's go over each scenario you covered in your question.

 Set-ADUser -Identity $($user.SID) -Clear Initials,info

The first method supplies two strings separated by a comma (this is interpreted as an array of strings) to the -Clear parameter. Good.

 $emptyParams='Initials' 
 Set-ADUser -Identity $($user.SID) -Clear $emptyParams

The second method is supplying a single string (or an array of a single element) to the -Clear parameter. Good.

 $emptyParams='Initials,info'
 Set-ADUser -Identity $($user.SID) -Clear $emptyParams

The final method is actually supplying the attribute "Initials,Info". As noted above, this is a single string with commas in it, and the cmdlet iterprets it as a single argument.


To achieve what I think you're going for, you'll need to build and supply an array of valid attribute names. This should work:

$emptyParams = @()
$emptyParams += "Initials"
$emptyParams += "Info"
Set-ADUser -Identity $($user.SID) -Clear $emptyParams

And actually, this should work, too:

 $emptyParams='Initials,info'
 Set-ADUser -Identity $($user.SID) -Clear $emptyParams.Split(',')
| improve this answer | |
0

Instead use -Clear parameter, I use workaround and set value to "$null", like :

Set-ADUser -Identity $($user.SID) -Initials $null

Currently, I can't update note field with this method.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.