【问题标题】:CSV input, powershell pulling $null value rows from targeted columnCSV 输入,powershell 从目标列中提取 $null 值行
【发布时间】:2018-05-05 23:41:10
【问题描述】:

我正在尝试创建一个脚本,以根据 CSV 文件中的数据在 Microsoft 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"
}

我只有两行数据,但返回的是两行所请求的额外输出(来自行),没有值。

【问题讨论】:

  • 输出如下所示: 团队名称:Test-team 团队描述:测试自动化 1 团队所有者:jsmith 团队类:私有 团队名称:Test-Team2 团队描述:测试自动化 2 团队所有者:jsmoe团队类别:公共团队描述:团队所有者:团队类别:团队描述:团队所有者:团队类别:团队描述:团队所有者:团队类别:团队描述:团队所有者:团队类别:
  • 您应该删除您的评论并以更易读的格式将该信息放入您的问题中。顺便说一句,你不需要在 for 中创建变量,直接将它们放在 write-host 命令中,如 thisl Write-Host "Team Ownwe: $($line.Team_owner)"

标签: powershell csv microsoft-teams


【解决方案1】:

您的代码本身没有问题,除了:

  • Teams_info.csv$path 之后被指定,在Import-Csv -Path 之后,我认为这是一个错字。

  • $path 可以想象 - 并且意外 - 是文件路径的 array,如果其他文件具有完全不同的列,您将获得空值第一个文件的列。

如果不是,肯定是Teams_info.csv的内容有问题,建议你检查一下;如下所示的管道到Format-Custom 也将帮助您检测$path 意外地是文件路径的array 的情况:

这是一个类似于您的输入的 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 生成由输出实例类型定义的自定义视图(非表格和非列表视图);对于Import-Csv 输出的[pscustomobject] 实例,您将获得上述视图,这是一种至少快速了解对象内容的便捷方式(您可能仍需要更深入地挖掘以区分空字符串和$nulls, ...)。

【讨论】:

  • 谢谢。我重新创建了 csv 文件,现在只能提取带有值的行。现在我遇到的问题是 Microsoft-Teams 模块“new-team -displayname $teamname”无法识别我的变量。错误:新团队:无法将“System.Object []”转换为参数“DisplayName”所需的类型“System.String”。不支持指定的方法。
  • @EveretteLamb:这表明变量$teamname 包含一个array 字符串,而New-Team 需要一个单个 字符串。
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 1970-01-01
  • 2021-08-09
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多