【问题标题】:CSV import returns null stringCSV 导入返回空字符串
【发布时间】:2019-03-14 14:45:24
【问题描述】:

我目前在下面得到了代码,但是我在 $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

有什么想法吗?

【问题讨论】:

  • 举例说明您的 CSV 文件的外观。使用随机(非实际)数据
  • 您能展示您的 CSV 样本吗?此外,当您在循环结束时调用 ConvertTo-SecureString 时,您在 $userpass-AsPlainText 参数之间缺少一个空格。
  • 您的 csv 是否有一个名为 Wachtwoord 的列?该列名称中是否有空格?
  • 您好,感谢您的回复,我已上传用于测试脚本的 CSV。数据与我在脚本中使用的数据完全相同,因为这只是学校的学习作业,我似乎无法弄清楚。
  • @BACON 谢谢,在发布几分钟后我确实看到了,我已经更改了它,但不幸的是这并不能解决我的问题,我使用的 CSV 可以在主帖中找到或在此链接:i.stack.imgur.com/Jrfau.png

标签: powershell csv properties null import-csv


【解决方案1】:

首先,当然,您的屏幕截图以及您的 sn-p 文本和非 sn-p 文本似乎都是从 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

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

【讨论】:

  • 谢谢@bacon 成功了! Handi 技巧了解分隔符。这肯定会在未来有所帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2020-01-27
  • 2020-07-11
  • 2015-05-25
  • 2011-05-09
  • 1970-01-01
相关资源
最近更新 更多