CSV импорт возвращает пустую строку - PullRequest
0 голосов
/ 09 октября 2018

В настоящее время у меня есть код ниже, однако я получаю $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

Есть идеи?

1 Ответ

0 голосов
/ 10 октября 2018

Во-первых, конечно, ваш скриншот, а также ваш фрагмент текста и текст, не являющийся фрагментом, похоже, скопированы из программы чтения CSV с графическим интерфейсом, потому что все, что мы получаем, это данные.Данные («V» в «CSV») здесь не так важны, как структура, инкапсуляция данных («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 также будет иметь ожидаемые свойства.

...