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
迭代器变量也将具有预期的属性。
我目前在下面找到了代码,但是我在 $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
迭代器变量也将具有预期的属性。