使用 powershell 从 CSV 文件更新用户 AD 属性
Update user AD attributes from CSV file using powershell
我正在尝试使用 powershell 从 CSV 文件更新 AD 用户 attributes:title、physicalDeliveryOfficeName 和部门。我是 Powershell 的新手,所以我需要一些帮助。 (请,并提前致谢)
因此,想法是匹配过滤器是 displayName 属性,我使用的脚本是:
Import-Module ActiveDirectory
$csv = Import-Csv C:\Temp\AD_import_test.csv
foreach ($line in $csv) {
$displayName = $line.displayName
Get-ADUser -Filter {displayName -eq $displayName} |
Set-ADUser -Title $($csv.title) -department $($csv.Department) -physicalDeliveryOfficeName $($csv.physicalDeliveryOfficeName) }
但是脚本返回错误:
Set-ADUser : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Title'. Specified method is not supported.
At line:6 char:19
+ Set-ADUser -Title $($csv.title) -department $($csv.Department) -physi ...
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Set-ADUser : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Title'. Specified method is not supported.
At line:6 char:19
+ Set-ADUser -Title $($csv.title) -department $($csv.Department) -physi ...
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser
你的代码对我来说似乎不错,除了 set-aduser
你需要用 $line
替换 $csv
Import-Module ActiveDirectory
$csv = Import-Csv C:\Temp\AD_import_test.csv
foreach ($line in $csv) {
$displayName = $line.displayName
Get-ADUser -Filter {displayName -eq $displayName} |
Set-ADUser -Title $($line.title) -department $($line.Department) -physicalDeliveryOfficeName $($line.physicalDeliveryOfficeName) }
您使用了错误的变量来分配这些值。在您的脚本 $csv 中包含整个 .csv 文件,但在您的 foreach 行中,您将每一行加载到 $line 中,这就是您需要设置值的内容。
所以从本质上讲,$($csv.title) 等于所有标题字段,而不仅仅是您感兴趣的字段。这就是为什么您收到错误消息说它是 System.Object[] 而不是 System.String... 因为它不是一个单一值。
我注意到您在“$displayName = $line.displayName”行上的设置是正确的,所以只有 Set-ADUser 行需要更新,如:
Set-ADUser -Title $($line.title) -department $($line.Department) -physicalDeliveryOfficeName $($line.physicalDeliveryOfficeName) }
编辑:
另外,对于这样的东西,一个有用的技巧是添加一些 Write-Output 行来显示变量内容是什么,这样您就可以检查它们是否符合您的预期,例如:
Write-Output $($line.title)
然后在 $line.title 的情况下应该显示单个值,而如果你这样做 $($csv.title) 它会 return 多个值并告诉你在哪里问题是。
我正在尝试使用 powershell 从 CSV 文件更新 AD 用户 attributes:title、physicalDeliveryOfficeName 和部门。我是 Powershell 的新手,所以我需要一些帮助。 (请,并提前致谢) 因此,想法是匹配过滤器是 displayName 属性,我使用的脚本是:
Import-Module ActiveDirectory
$csv = Import-Csv C:\Temp\AD_import_test.csv
foreach ($line in $csv) {
$displayName = $line.displayName
Get-ADUser -Filter {displayName -eq $displayName} |
Set-ADUser -Title $($csv.title) -department $($csv.Department) -physicalDeliveryOfficeName $($csv.physicalDeliveryOfficeName) }
但是脚本返回错误:
Set-ADUser : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Title'. Specified method is not supported.
At line:6 char:19
+ Set-ADUser -Title $($csv.title) -department $($csv.Department) -physi ...
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser
Set-ADUser : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'Title'. Specified method is not supported.
At line:6 char:19
+ Set-ADUser -Title $($csv.title) -department $($csv.Department) -physi ...
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Set-ADUser], ParameterBindingException
+ FullyQualifiedErrorId : CannotConvertArgument,Microsoft.ActiveDirectory.Management.Commands.SetADUser
你的代码对我来说似乎不错,除了 set-aduser
你需要用 $line
$csv
Import-Module ActiveDirectory
$csv = Import-Csv C:\Temp\AD_import_test.csv
foreach ($line in $csv) {
$displayName = $line.displayName
Get-ADUser -Filter {displayName -eq $displayName} |
Set-ADUser -Title $($line.title) -department $($line.Department) -physicalDeliveryOfficeName $($line.physicalDeliveryOfficeName) }
您使用了错误的变量来分配这些值。在您的脚本 $csv 中包含整个 .csv 文件,但在您的 foreach 行中,您将每一行加载到 $line 中,这就是您需要设置值的内容。
所以从本质上讲,$($csv.title) 等于所有标题字段,而不仅仅是您感兴趣的字段。这就是为什么您收到错误消息说它是 System.Object[] 而不是 System.String... 因为它不是一个单一值。
我注意到您在“$displayName = $line.displayName”行上的设置是正确的,所以只有 Set-ADUser 行需要更新,如:
Set-ADUser -Title $($line.title) -department $($line.Department) -physicalDeliveryOfficeName $($line.physicalDeliveryOfficeName) }
编辑: 另外,对于这样的东西,一个有用的技巧是添加一些 Write-Output 行来显示变量内容是什么,这样您就可以检查它们是否符合您的预期,例如:
Write-Output $($line.title)
然后在 $line.title 的情况下应该显示单个值,而如果你这样做 $($csv.title) 它会 return 多个值并告诉你在哪里问题是。