CSV 输入,powershell 从目标列中提取 $null 值行
CSV input, powershell pulling $null value rows from targeted column
我正在尝试创建一个脚本,以根据 CSV 文件中的数据在 Microsoft Teams 中创建 Teams。
CSV 文件包含以下列:Team_name, Team_owner, Team_Description, Team_class
脚本应获取 Team_name
行值并使用该值创建变量。使用该变量来查询它是否存在于 Teams 中,如果不存在,则使用其他列中的数据创建它。
我遇到的问题是我的 foreach
循环似乎在收集没有值的行。我通过首先尝试识别值并监视输出来简化测试。
这是测试脚本
$Team_infocsv = Import-csv -path $path Teams_info.csv
# $Team_infocsv | Foreach-object{
foreach($line in $Team_infocsv){
$owner = $line.Team_owner
Write-Host "Team Owner: $owner"
$teamname = $line.Team_name
Write-Host "Team Name: $teamname"
$team_descr = $line.Team_Description
Write-Host "Team Description: $team_descr"
$teamclass = $line.Team_class
Write-Host "Team Class: $teamclass"
}
我只有两行数据,但返回的是请求的两行数据(来自行)没有值的额外输出。
您的代码本身没有问题,除了:
Teams_info.csv
在 Import-Csv -Path
之后被指定 除了 到 $path
,我认为这是一个错字,但是.
$path
可以想象 - 并且意外地 - 是文件路径的 array ,并且如果附加文件具有完全不同的列,您会得到第一个文件列的空值。
如果不是,那问题肯定出在Teams_info.csv
的内容上,建议你检查一下;如下所示通过管道传输到 Format-Custom
还将帮助您检测 $path
意外地是文件路径的 数组 的情况:
这是一个类似于您的输入的 CSV 文件的工作示例 - 临时创建 - 您可以将其与您的输入文件进行比较。
# Create sample file.
@'
"Team_name","Team_owner","Team_Description","Team_class"
"Team_nameVal1","Team_ownerVal1","Team_DescriptionVal1","Team_classVal1"
"Team_nameVal2","Team_ownerVal2","Team_DescriptionVal2","Team_classVal2"
'@ > test.csv
# Import the file and examine the objects that get created.
# Note the use of Format-Custom.
Import-Csv test.csv test.csv | Format-Custom
以上结果:
class PSCustomObject
{
Team_name = Team_nameVal1
Team_owner = Team_ownerVal1
Team_Description = Team_DescriptionVal1
Team_class = Team_classVal1
}
class PSCustomObject
{
Team_name = Team_nameVal2
Team_owner = Team_ownerVal2
Team_Description = Team_DescriptionVal2
Team_class = Team_classVal2
}
Format-Custom
生成自定义视图(非 table 和非列表视图),由正在输出的实例类型定义;在 Import-Csv
输出的 [pscustomobject]
实例的情况下,您会得到上述视图,这是至少快速了解对象内容的便捷方式(您可能仍需要更深入地挖掘将空字符串与 $null
s, ...).
区分开来
我正在尝试创建一个脚本,以根据 CSV 文件中的数据在 Microsoft Teams 中创建 Teams。
CSV 文件包含以下列:Team_name, Team_owner, Team_Description, Team_class
脚本应获取 Team_name
行值并使用该值创建变量。使用该变量来查询它是否存在于 Teams 中,如果不存在,则使用其他列中的数据创建它。
我遇到的问题是我的 foreach
循环似乎在收集没有值的行。我通过首先尝试识别值并监视输出来简化测试。
这是测试脚本
$Team_infocsv = Import-csv -path $path Teams_info.csv
# $Team_infocsv | Foreach-object{
foreach($line in $Team_infocsv){
$owner = $line.Team_owner
Write-Host "Team Owner: $owner"
$teamname = $line.Team_name
Write-Host "Team Name: $teamname"
$team_descr = $line.Team_Description
Write-Host "Team Description: $team_descr"
$teamclass = $line.Team_class
Write-Host "Team Class: $teamclass"
}
我只有两行数据,但返回的是请求的两行数据(来自行)没有值的额外输出。
您的代码本身没有问题,除了:
Teams_info.csv
在Import-Csv -Path
之后被指定 除了 到$path
,我认为这是一个错字,但是.$path
可以想象 - 并且意外地 - 是文件路径的 array ,并且如果附加文件具有完全不同的列,您会得到第一个文件列的空值。
如果不是,那问题肯定出在Teams_info.csv
的内容上,建议你检查一下;如下所示通过管道传输到 Format-Custom
还将帮助您检测 $path
意外地是文件路径的 数组 的情况:
这是一个类似于您的输入的 CSV 文件的工作示例 - 临时创建 - 您可以将其与您的输入文件进行比较。
# Create sample file.
@'
"Team_name","Team_owner","Team_Description","Team_class"
"Team_nameVal1","Team_ownerVal1","Team_DescriptionVal1","Team_classVal1"
"Team_nameVal2","Team_ownerVal2","Team_DescriptionVal2","Team_classVal2"
'@ > test.csv
# Import the file and examine the objects that get created.
# Note the use of Format-Custom.
Import-Csv test.csv test.csv | Format-Custom
以上结果:
class PSCustomObject
{
Team_name = Team_nameVal1
Team_owner = Team_ownerVal1
Team_Description = Team_DescriptionVal1
Team_class = Team_classVal1
}
class PSCustomObject
{
Team_name = Team_nameVal2
Team_owner = Team_ownerVal2
Team_Description = Team_DescriptionVal2
Team_class = Team_classVal2
}
Format-Custom
生成自定义视图(非 table 和非列表视图),由正在输出的实例类型定义;在 Import-Csv
输出的 [pscustomobject]
实例的情况下,您会得到上述视图,这是至少快速了解对象内容的便捷方式(您可能仍需要更深入地挖掘将空字符串与 $null
s, ...).