我正在尝试使用 csv 文件中的属性,但我收到一条错误消息,指出 属性 不存在,但它确实存在,我检查了它
I am trying to use properties from a csv file, but I'm receiving an error message that a property doesn't exist, but it does and I checked it
这是我目前的情况:
一个名为 C:\TEMP\AIST2330TP04\SampleEnrollees.csv 的 csv 文件,其中包含以下信息:
OrgDefinedId,Username,LastName,FirstName,Email,Section
1,tuser,User,Test,tuser@mymail.com,AIST2330
2,duser,User,Demo,duser@mymail.com,AIST2330
3,istudent,Student,Ima,istudent@mymail.com,AIST2330
4,ustudent,Student,Ura,ustudent@mymail.com,AIST2330
5,cfarquar,Farquar,Clyde,cfarquar@mymail.com,AIST2330
我的代码是参数化的,获取某些信息并输出文本文件:
#this parameter is a requirement
param(
[string]$WorkDir = 'C:\Users\cryanderson\Documents'
)
#this is just so that the process can be run multiple times without creating multiple folders and files
Remove-Item 'DemoFiles' -Recurse -ErrorAction Ignore
mkdir 'DemoFiles'
$csv=Import-Csv C:\TEMP\AIST2330TP04\SampleEnrollees.csv
#I want to make sure I am using existing properties, so I display them here
echo $csv
$csv | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty
'Name'
#The loop that I am having issues with
ForEach($line in $csv)`
{
$username = $_.Username,`
$lastname = $_.LastName,`
$firstname = $_.FirstName,`
$text = "Generated for $firstname $lastname by cryanderson.",`
$text |Out-File
"C:\Users\cryanderson\Documents\DemoFiles${username}Stuff.txt"
}
当我 运行 它时,发生了以下情况,没有创建任何文件:
PS C:\Users\cryanderson\documents>
C:\Users\cryanderson\Documents\CreateDemoFiles.ps1
Directory: C:\Users\cryanderson\documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 3/11/2018 8:54 PM DemoFiles
OrgDefinedId : 1
Username : tuser
LastName : User
FirstName : Test
Email : tuser@mymail.com
Section : AIST2330
OrgDefinedId : 2
Username : duser
LastName : User
FirstName : Demo
Email : duser@mymail.com
Section : AIST2330
OrgDefinedId : 3
Username : istudent
LastName : Student
FirstName : Ima
Email : istudent@mymail.com
Section : AIST2330
OrgDefinedId : 4
Username : ustudent
LastName : Student
FirstName : Ura
Email : ustudent@mymail.com
Section : AIST2330
OrgDefinedId : 5
Username : cfarquar
LastName : Farquar
FirstName : Clyde
Email : cfarquar@mymail.com
Section : AIST2330
Email
FirstName
LastName
OrgDefinedId
Section
Username
#This error message is repeated for all 5 users listed
The property 'FirstName' cannot be found on this object. Verify that the
property exists and can be set.
At C:\Users\cryanderson\Documents\CreateDemoFiles.ps1:14 char:14
+ $firstname = $_.FirstName,`
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我认为我的 for 循环有问题,但我无法解决。请帮忙?
总的来说,我认为您的问题是使用 $_
,这将访问管道中的当前项目,您将其视为循环中的项目。但是,由于您正在分配每个项目 $line in $csv
它没有被放置在管道中,并且在循环中的所有代码中,您应该访问 $line
变量
的属性
编辑:还要记住 ` 正在做什么。增加一个这样的代码会破坏一行代码,并产生一些意想不到的结果
你基本上是说这是一行:
$username = $_.Username, $lastname = $_.LastName, $firstname = $_.FirstName, $text = "Generated for $firstname $lastname by cryanderson.", $text |Out-File "C:\Users\cryanderson\Documents\DemoFiles${username}Stuff.txt"
此外,使用此代码,Out-File 会出现空路径错误,因此我假设您只是解决了该问题。
我相信您获得奇怪的 $username 值的原因是因为代码是一次性执行的,并且在 Out-File
是 运行 之前没有分配变量。所以第一个循环它被分配为 null,第二个循环它将包含先前分配的值。不知道为什么它只会 运行 两次,希望其他人可以回答。
这是我目前的情况:
一个名为 C:\TEMP\AIST2330TP04\SampleEnrollees.csv 的 csv 文件,其中包含以下信息:
OrgDefinedId,Username,LastName,FirstName,Email,Section
1,tuser,User,Test,tuser@mymail.com,AIST2330
2,duser,User,Demo,duser@mymail.com,AIST2330
3,istudent,Student,Ima,istudent@mymail.com,AIST2330
4,ustudent,Student,Ura,ustudent@mymail.com,AIST2330
5,cfarquar,Farquar,Clyde,cfarquar@mymail.com,AIST2330
我的代码是参数化的,获取某些信息并输出文本文件:
#this parameter is a requirement
param(
[string]$WorkDir = 'C:\Users\cryanderson\Documents'
)
#this is just so that the process can be run multiple times without creating multiple folders and files
Remove-Item 'DemoFiles' -Recurse -ErrorAction Ignore
mkdir 'DemoFiles'
$csv=Import-Csv C:\TEMP\AIST2330TP04\SampleEnrollees.csv
#I want to make sure I am using existing properties, so I display them here
echo $csv
$csv | Get-member -MemberType 'NoteProperty' | Select-Object -ExpandProperty
'Name'
#The loop that I am having issues with
ForEach($line in $csv)`
{
$username = $_.Username,`
$lastname = $_.LastName,`
$firstname = $_.FirstName,`
$text = "Generated for $firstname $lastname by cryanderson.",`
$text |Out-File
"C:\Users\cryanderson\Documents\DemoFiles${username}Stuff.txt"
}
当我 运行 它时,发生了以下情况,没有创建任何文件:
PS C:\Users\cryanderson\documents>
C:\Users\cryanderson\Documents\CreateDemoFiles.ps1
Directory: C:\Users\cryanderson\documents
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 3/11/2018 8:54 PM DemoFiles
OrgDefinedId : 1
Username : tuser
LastName : User
FirstName : Test
Email : tuser@mymail.com
Section : AIST2330
OrgDefinedId : 2
Username : duser
LastName : User
FirstName : Demo
Email : duser@mymail.com
Section : AIST2330
OrgDefinedId : 3
Username : istudent
LastName : Student
FirstName : Ima
Email : istudent@mymail.com
Section : AIST2330
OrgDefinedId : 4
Username : ustudent
LastName : Student
FirstName : Ura
Email : ustudent@mymail.com
Section : AIST2330
OrgDefinedId : 5
Username : cfarquar
LastName : Farquar
FirstName : Clyde
Email : cfarquar@mymail.com
Section : AIST2330
Email
FirstName
LastName
OrgDefinedId
Section
Username
#This error message is repeated for all 5 users listed
The property 'FirstName' cannot be found on this object. Verify that the
property exists and can be set.
At C:\Users\cryanderson\Documents\CreateDemoFiles.ps1:14 char:14
+ $firstname = $_.FirstName,`
+ ~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : PropertyNotFound
我认为我的 for 循环有问题,但我无法解决。请帮忙?
总的来说,我认为您的问题是使用 $_
,这将访问管道中的当前项目,您将其视为循环中的项目。但是,由于您正在分配每个项目 $line in $csv
它没有被放置在管道中,并且在循环中的所有代码中,您应该访问 $line
变量
编辑:还要记住 ` 正在做什么。增加一个这样的代码会破坏一行代码,并产生一些意想不到的结果
你基本上是说这是一行:
$username = $_.Username, $lastname = $_.LastName, $firstname = $_.FirstName, $text = "Generated for $firstname $lastname by cryanderson.", $text |Out-File "C:\Users\cryanderson\Documents\DemoFiles${username}Stuff.txt"
此外,使用此代码,Out-File 会出现空路径错误,因此我假设您只是解决了该问题。
我相信您获得奇怪的 $username 值的原因是因为代码是一次性执行的,并且在 Out-File
是 运行 之前没有分配变量。所以第一个循环它被分配为 null,第二个循环它将包含先前分配的值。不知道为什么它只会 运行 两次,希望其他人可以回答。