CSV 导入 returns 空字符串

CSV import returns null string

我目前在下面找到了代码,但是我在 $userpass 变量上返回了 $null。我检查了 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

有什么想法吗?

首先,您的屏幕截图以及您的片段文本和非片段文本似乎都是从 GUI CSV reader 复制的,因为我们得到的只是数据。数据("CSV"中的"V")在这里并不重要,重要的是结构,数据的封装("CS")。也就是说,如果您在记事本中打开 CSV 文件,您将看到的文本。你的 OneDrive link 结果就是我要找的东西,尽管在我下载文件之前由于某种原因它似乎是原始 CSV 的屏幕截图。

此外,这只是对未来 Whosebug 使用的提示,如果您有文本要共享,最好以文本而不是图像的形式共享,因为这样可以方便复制和粘贴、搜索引擎和屏幕readers.

总之,继续解决您的问题。 $userpass 不应该是唯一意外为空的变量,因为 $user 的属性中的 none 也有一个值。如果我们看一下 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

...因此,通过该更改,foreach 块中的 $user 迭代器变量也将具有预期的属性。