【问题标题】:Powershell CSV Variable IssuePowershell CSV 变量问题
【发布时间】:2021-11-18 03:47:41
【问题描述】:

我在将变量传递到 CSV 时遇到问题。我需要通过电子邮件发送一份显示所有技能的电子表格。每种技能都使用相同的电子邮件。我只想让 $email 填充我的 csv。它没有通过,只在列中显示 $email 而不是 test@test.com。

我是 powershell 的新手,因此非常感谢任何指导。谢谢。

------------这是我的脚本-------------------------

Add-Content -Path C:\temp\test.csv -Value '"User Name","Skill Name","Level"'

$Email = "test@test.com"

$agent = @(

}

'"$Email","T1","4"'

'"$Email","T2","6"'

'"$Email","T3","7"'

'"$Email","Training","1"'

'"$Email","Supervisor","8"'

)

$代理 | foreach { 添加内容 -Path C:\temp\temp.csv -Value $_ }

【问题讨论】:

  • 你看过Export-Csv吗?
  • 下一次,使用代码块使其更易于阅读。我想我在每行的开头看到一个 ' 后跟一个 "?如果是这样,变量扩展将不起作用,您需要使用双引号来开始您的字符串,然后使用两个 double 转义里面的那些-quotes ""。所以第 1 行应该是 """$Email"",""T1"",""4"""。

标签: powershell csv variables


【解决方案1】:

因为您是 Powershell 新手,所以我将向您展示两种解决问题的替代方法。这些可能会帮助您习惯 powershell 的一些功能。

$Email = 'test@test.com'

$mytext = @"
"User Name","Skill Name","Level"
"$Email","T1","4"
"$Email","T2","6"
"$Email","T3","7"
"$Email","Training","1"
"$Email","Supervisor","8"
"@


$mytext | Out-file Mycsv.csv

在这里,我只是设置了 Email 变量,然后创建了一个大的 here 字符串,其中包含标题和五个数据记录。因为我在 here 字符串上使用了双引号,所以将在其中检测到变量 $Email。带有单引号的 here 字符串的行为不正确。

然后,我将 $mytext 一次传递一行通过管道,Out-file 将所有这些收集到一个文件中。

这是第二种方法:

$Email = 'test@test.com'

$myarray = @(
       [PsCustomobject]@{"User Name" = $Email; "Skill Name" = "T1"; "Level" = 4}
       [PsCustomobject]@{"User Name" = $Email; "Skill Name" = "T2"; "Level" = 6}
       [PsCustomobject]@{"User Name" = $Email; "Skill Name" = "T3"; "Level" = 7}
       [PsCustomobject]@{"User Name" = $Email; "Skill Name" = "Training"; "Level" = 1}
       [PsCustomobject]@{"User Name" = $Email; "Skill Name" = "Supervisor"; "Level" = 8}
)

$myarray | Export-Csv myothercsv.csv

在这里,我设置了变量 Email,然后创建了一个自定义对象数组,每个对象都具有相同的命名属性。

然后我通过管道将数组传递给 Export-Csv,它将所有内容转换为 Csv 格式。值得注意的是,Export-Csv V5 在其中添加了一行显示#TYPE。这不难消除,如果需要,可以使用 notype 参数。还需要注意的是,输出文件中的双引号都是Export-csv添加的,并不是脚本中双引号的副本。

编辑。管道是在 powershell 中完成工作的一种非常简单和灵活的方式。出于这个原因,像 Out-File 和 Export-Csv 这样的 cmdlet 可以很好地与提供输入流的管道一起工作。大量的循环控制、初始化和完成繁忙的工作正在由 PS 在幕后处理。

【讨论】:

  • 我很想自己建议#2;当您拥有更大、更复杂的数据集时,它更容易扩展。另请注意,默认情况下,Export-Csv 仅在 Windows PowerShell(v5 及更早版本)中放入类型信息行; PowerShell Core (v6+) 不再这样做,但它仍会采用 -NoTypeInformation 参数。
  • 感谢您澄清有关 -notype 的交易。我还在运行V5。你对缩放提出了一个很好的观点。规模越大,通过使用一组对象而不是代表数据的文本,您将获得更多收益。
  • 我一直在尝试使用较新的 PowerShell,但由于核心模块仍然需要 Windows PowerShell(AzureAD、ExchangeOnlineManagement、MicrosoftTeams 等)而不得不回来。
  • 感谢沃尔特和达克。我最终准备好做一些类似于沃尔特斯第一个建议的事情。很高兴了解 #2 以便在未来更可扩展的东西。非常感谢这些信息!
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 2018-06-22
  • 2017-07-03
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
相关资源
最近更新 更多