使用导入本地机器csv作为变量创建批量广告用户并传递到远程服务器



我尝试导入本地csv文件并在远程服务器中创建aduser。本地计算机和远程服务器都是加入域。我可以在远程服务器中导入csv并创建aduser,但我不知道如何导入本地csv并传递到远程服务器。

显示

cmdlet New-ADUser at command pipeline position 1
Supply values for the following parameters:
Name:

这是我的示例.csv列名

LastName,FirstName,EmpolyID,LoginName,GroupName,OU

这是我的密码。

$Users = Import-CSV E:example.csv
$Session = New-PSSession -Computername server1 -Credential user@domain.com
foreach ($User in $Users) {
Invoke-Command -Session $Session -Scriptblock {
Param($FirstName, $LastName, $EmpolyID, $OU, $GroupName)
New-ADUser
-Name ($FirstName + $LastName)
-DisplayName ($FirstName + $LastName)
-Surname $LastName
-GivenName $FirstName
-SamAccountName $EmpolyID
-Path $OU
-Description $User.EmpolyID
-Enable $true
-ChangePasswordAtLogon $true
-AccountPassword ConvertTo-SecureString "changpassfirst" -AsPlainText -Force
Add-ADGroupMember -Identity $GroupName -Members $EmpolyID
} -ArgumentList $User.FirstName, $User.LastName, $User.EmpolyID, $User.OU, $User.GroupName
}
$Users = Import-CSV E:example.csv
$Session = New-PSSession -Computername server1 -Credential user@domain.com
$Group = "MyGroup"
$code = {
$GroupName = $using:group
$userArray = $using:Users
foreach ($user in $userArray){
$paramsHt = @{
Name=($user.FirstName + $user.LastName)
DisplayName=($user.FirstName + $user.LastName)
SurName=$user.LastName
GivenName=$user.FirstName
smaAccountName=$user.EmpolyID
Path=$user.OU
Description=$user.EmpolyID
Enable=$true
ChangePasswordAtLogon=$true
AccountPassword=(ConvertTo-SecureString "changpassfirst" -AsPlainText -Force)
}
$null = new-aduser @paramsHt
$null = Add-ADGroupMember -Identity $GroupName -Members $EmpolyID
}
}
invoke-command -session $session -scriptblock $code

您尝试从远程计算机访问调用方计算机上可用的变量。您可以通过使用$using来实现这一点,因此不需要参数argumentslist。如果你想走-argumentlist路线,你可以通过对数组进行索引来访问这些值,例如$args[0]。

不需要为每个用户调用invoke命令,您只想连接到单个目标机器,所以只需要调用一次。

因此,原则上,这是可行的。但你将面临另一个问题:kerberos双跳。您从机器A跳到机器B并执行调用机器C(域控制器(=双跳的代码。您可以通过将凭据传递给new aduser cmdlet来解决此问题。

真的需要跳到另一台机器上吗?你不能从机器A和active directory通话吗?

最新更新