我目前在下面放下代码,但是在$null
变量上返回了$userpass
。我已经检查了CSV文件,并且都应该正确。
Import-Module activedirectory
#Dit deel van het script is voor het verzamelen van informatie die in de commands gestopt wordt.
$csvpad = Read-Host -Prompt 'Geef het pad naar het CSV bestand op (zonder bestandsnaam)
ZONDER backslash, bijvoorbeeld: D:\Gebruikers mappen'
$csvbestand = Read-Host -Prompt 'Geef het CSV bestandsnaam op'
#Voor het opslaan van de data uit het opgegeven .CSV bestand in de $users variable
Write-Host "CSV bestand importeren!"
$users = Import-Csv -Path "$csvpad\$csvbestand"
#Loop om door elke rij in het CSV bestand te gaan.
Foreach ($user in $users)
{
#Leest de data van elk veld in elke rij en geeft de juiste data aan de juiste variable.
$displayname = $user.Voornaam + " " + $user.Achternaam
$userfirstname = $user.Voornaam
$userlastname = $user.Achternaam
$username = $user.Gebruikersnaam
$usermail = $user.Voornaam + "." + $user.Achternaam + "@" + $user.Domein
$ou = $user.OU
$userpass = $user.Wachtwoord
#Als de user niet in AD bestaat gaat deze door met het maken van een nieuwe account.
New-ADUser -Name "$displayname" -DisplayName "$displayname" -GivenName "$userfirstname" -Surname "$userlastname" -Enabled $true -SamAccountName "$username" -EmailAddress "$usermail" -Path "$ou" -AccountPassword (ConvertTo-SecureString $userpass -AsPlainText -Force) -ChangePasswordAtLogon $true -PasswordNeverExpires $true
}
Write-Host "Users uit het CSV bestand zijn aangemaakt!"
这是我正在使用的CSV(数据是随机的,因为它只是学校的学习项目)。
Voornaam;Achternaam;Domein;Gebruikersnaam;Wachtwoord;OU;Berekening usernames
Test;Account1;01testict.nl;Te.Account1;P@ssw0rd;OU=Users,DC=01testict,DC=nl;Te
Testing;Account2;01testict.nl;Te.Account2;P@ssw0rd;OU=Users,DC=01testict,DC=nl;Te
Test123;Account3;01testict.nl;Te.Account3;P@ssw0rd;OU=Users,DC=01testict,DC=nl;Te
Test971;Account4;01testict.nl;Te.Account4;P@ssw0rd;OU=Users,DC=01testict,DC=nl;Te
Test652;Account5;01testict.nl;Te.Account5;P@ssw0rd;OU=Users,DC=01testict,DC=nl;Te
有什么想法吗?
答案 0 :(得分:1)
首先,当然,您的屏幕快照以及您的摘录文本和非摘录文本似乎都是从GUI CSV阅读器复制的,因为我们得到的只是数据。数据(“ CSV”中的“ V”)在这里不像结构(数据的封装)(“ CS”)那么重要。也就是说,如果您在记事本中打开CSV文件,将会看到的文本。您的OneDrive链接原来是我想要的,尽管出于某种原因,直到我下载该文件后,它还是原始CSV的屏幕截图。
此外,这只是将来StackOverflow使用的一个提示,如果您要共享文本,则最好以文本而不是图像的方式进行共享,因为这样可以使复制和粘贴,搜索引擎和屏幕阅读器可以访问它。
无论如何,继续解决您的问题。 $userpass
不应是唯一意外为空的变量,因为$user
的所有属性都没有值。您可以了解为什么我们看看Import-Csv
产生了什么...
PS> Import-Csv -Path "$Env:Temp\userlist.csv"
Voornaam;Achternaam;Domein;Gebruikersnaam;Wachtwoord;OU;Berekening usernames
----------------------------------------------------------------------------
Test;Account1;01testict.nl;Te.Account1;P@ssw0rd;OU=Users
Testing;Account2;01testict.nl;Te.Account2;P@ssw0rd;OU=Users
Test123;Account3;01testict.nl;Te.Account3;P@ssw0rd;OU=Users
Test971;Account4;01testict.nl;Te.Account4;P@ssw0rd;OU=Users
Test652;Account5;01testict.nl;Te.Account5;P@ssw0rd;OU=Users
这将输出具有一个名为Voornaam;Achternaam;Domein;Gebruikersnaam;Wachtwoord;OU;Berekening usernames
的单个属性的对象,并将该记录的所有值填充在一起。这样做的原因是因为Import-Csv
默认情况下期望分隔符为逗号,而文件使用分号。解决方法是使用-Delimiter
参数指定分号作为Import-Csv
使用的定界符,您现在可以看到它输出具有正确属性的完整对象...
PS> Import-Csv -Path "$Env:Temp\userlist.csv" -Delimiter ';'
Voornaam : Test
Achternaam : Account1
Domein : 01testict.nl
Gebruikersnaam : Te.Account1
Wachtwoord : P@ssw0rd
OU : OU=Users,DC=01testict,DC=nl
Berekening usernames : Te
Voornaam : Testing
Achternaam : Account2
Domein : 01testict.nl
Gebruikersnaam : Te.Account2
Wachtwoord : P@ssw0rd
OU : OU=Users,DC=01testict,DC=nl
Berekening usernames : Te
Voornaam : Test123
Achternaam : Account3
Domein : 01testict.nl
Gebruikersnaam : Te.Account3
Wachtwoord : P@ssw0rd
OU : OU=Users,DC=01testict,DC=nl
Berekening usernames : Te
Voornaam : Test971
Achternaam : Account4
Domein : 01testict.nl
Gebruikersnaam : Te.Account4
Wachtwoord : P@ssw0rd
OU : OU=Users,DC=01testict,DC=nl
Berekening usernames : Te
Voornaam : Test652
Achternaam : Account5
Domein : 01testict.nl
Gebruikersnaam : Te.Account5
Wachtwoord : P@ssw0rd
OU : OU=Users,DC=01testict,DC=nl
Berekening usernames : Te
...因此,有了这一更改,您在$user
块中的foreach
迭代器变量也将具有预期的属性。