【问题标题】:"Cannot validate argument on parameter 'Identity'" while changing the description for multiple users更改多个用户的描述时“无法验证参数'Identity'的参数”
【发布时间】:2016-02-05 06:44:01
【问题描述】:

我有一个简单的脚本来更改 AD 中用户的部分描述。

Get-ADUser testuser -Properties description | ForEach-Object { 
    Set-ADUser $_.SamAccountName -Description "ChgDescript,$($_.Description.Split(',')[1])" 
}

但是,我现在有 700 个用户,我需要使用上面的命令更改部分描述。我无法正确找出脚本来导入 .csv 文件并针对它运行脚本。

$csvFile = "path_is_here"

Import-Module ActiveDirectory

Import-Csv $csvFile | Get-ADUser -Properties description | ForEach-Object { 
    Set-ADUser $_.SamAccountName -Description "ChgDescript,$($_.Description.Split(',')[1])" 
}

当我运行上面的脚本时,我收到以下错误:

无法验证参数“身份”的参数。

【问题讨论】:

  • 您的 CSV 文件包含哪些列?

标签: powershell active-directory


【解决方案1】:

错误来自Get-ADuser cmdlet,并通知您其-Identity 参数为空。我不知道您的输入文件的结构;但让我们假设它只是一个帐户名称列表(因此我添加了一个标题值AccountName 以提高可读性),将由Import-Csv cmdlet 创建的自定义对象的属性传递给Get-ADUser-Identity参数,看看是否有帮助。

单元测试示例:

Import-Csv -Path "C:\Temp\Users.txt" -Header "AccountName" | ForEach-Object {
    Get-ADUser -Identity $_.AccountName
}

Set-ADUser帮助示例中的结账方法3

http://go.microsoft.com/fwlink/?LinkID=144991

修改“saraDavis”用户的 Manager 属性 使用 Windows PowerShell 命令行修改本地实例 “saraDavis”用户。然后将Instance参数设置为本地 实例。

看看这是否有效:

$Users = Import-Csv -Path "C:\test_users.txt" -Header "AccountName"
     foreach($User in $Users){ 
     $ADUser = Get-ADUser -Identity $User.AccountName -Properties Description 
     $ADUser.Description = "PUT YOUR MODIFIED DESCRIPTION HERE" 
     Set-ADUser -Instance $ADUser 
}

【讨论】:

  • 我现在遇到了另一个错误:您不能在空值表达式上调用方法。在 line:7 char:21 + $_.description.split
  • 它正在将描述从“OldName,1234567”更改为“NewName”,我不确定它为什么会这样做。 csv 文件仅包含“AccountName”及其下方的用户名。
  • 好的。查看 Set-ADUser 方法 3 的帮助示例:通过使用 Windows PowerShell 命令行修改“saraDavis”用户的本地实例,修改“saraDavis”用户的 Manager 属性。然后将Instance参数设置为本地实例。 link 尝试:$Users = Import-Csv -Path "C:\test_users.txt" -Header "AccountName" foreach($User in $Users){ $ADUser = Get-ADUser -Identity $User.AccountName -Properties Description $ADUser.Description = "将您修改后的描述放在这里" Set-aduser -Instance $ADUser }
【解决方案2】:

可能你之前必须将描述存储在一个变量中,例如:

Get-Content users.txt | Get-ADUser  -Prop Description | Foreach {
$desc = $_.description + " Disabled 21122012 123456"
     Set-ADUser  $_.sAMAccountName -Description $desc
 }

(刚刚从technet复制)

【讨论】:

  • 虽然首先存储变量可能会有所帮助并提高代码可读性,但如果它更直接地解决了如何将其用于问题。在您写完答案后,问题的格式已被编辑,因此应该更容易看到它的真正要求。
猜你喜欢
  • 2015-12-10
  • 2019-06-01
  • 2023-02-23
  • 1970-01-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
相关资源
最近更新 更多