通过本地CSV批量创建AD用户并传递至远程服务器的问题
解决本地CSV远程创建AD用户的问题
报错原因
你遇到的Supply values for the following parameters: Name:错误,根源是代码里的两个明确问题:
- 远程脚本块内无法访问本地会话的
$User变量,脚本里的-Description $User.EmpolyID会导致该参数值为空,进而引发New-ADUser参数校验失败。 AccountPassword参数的ConvertTo-SecureString命令未用括号包裹,PowerShell会将其解析为多个独立参数,导致密码参数无效。
修正后的代码
$Users = Import-CSV E:\example.csv $Session = New-PSSession -Computername server1 -Credential user@domain.com # 可选优化:如果CSV条目多,先把文件复制到远程服务器再批量处理,减少远程调用开销 # Copy-Item -Path E:\example.csv -Destination "C:\temp\" -ToSession $Session foreach ($User in $Users) { Invoke-Command -Session $Session -Scriptblock { Param($FirstName, $LastName, $EmpolyID, $OU, $GroupName) # 先生成安全字符串密码,避免参数解析错误 $securePassword = ConvertTo-SecureString "changpassfirst" -AsPlainText -Force New-ADUser ` -Name ($FirstName + $LastName) ` -DisplayName ($FirstName + $LastName) ` -Surname $LastName ` -GivenName $FirstName ` -SamAccountName $EmpolyID ` -Path $OU ` -Description $EmpolyID ` -Enable $true ` -ChangePasswordAtLogon $true ` -AccountPassword $securePassword Add-ADGroupMember -Identity $GroupName -Members $EmpolyID } -ArgumentList $User.FirstName, $User.LastName, $User.EmpolyID, $User.OU, $User.GroupName } # 使用完会话后关闭 Remove-PSSession $Session
核心修正点
- 把
-Description $User.EmpolyID替换为-Description $EmpolyID,改用脚本块内部的参数变量,避免访问本地会话的$User。 - 将
ConvertTo-SecureString命令的结果存入变量(或直接用括号(ConvertTo-SecureString ...)包裹),确保AccountPassword参数拿到正确的安全字符串值。
内容的提问来源于stack exchange,提问作者Felix
相关产品推荐
相关产品推荐

