【问题标题】:How Do I access header information in an array如何访问数组中的标头信息
【发布时间】:2014-03-14 16:17:06
【问题描述】:

首先,我是 PowerShell 的新手,并且用许多不同的语言编写过代码。我的大部分经验来自 java,所以通常我从那个背景格式化我的代码,所以如果它看起来很疯狂,我很抱歉。

我正在尝试制作一个可以针对 CSV 运行的脚本,该脚本会将每个对象加载到一个数组中。然后,我想检查每个对象以确保它附有电子邮件地址、名字和姓氏。我们目前正在手动删除无效条目。

我正在使用以下代码。我正在尝试导入 CSV。我想读取数组中的每个元素并删除不符合我的条件的条目,然后我想将其导出到 CSV。我对数组中的对象是什么样子感到困惑,如何检查每个对象中的信息是否为空。任何关于逻辑的帮助都会很好。 CSV 有下面列出的标题,但我只关心上面列出的一次。谢谢, ' $csv = Read-Host "输入 CSV 文件路径"

$CsvArray = Import-Csv $csv -Header Lastname,Firstname,Department,Phonenumber,Email

  foreach ($i in $CsvArray)
   {
     Write-Host $CsvArray($i)

  if(Lastname -eq $NULL) -or (firstname -eq $NULL) -or (Email -eq $NULL)
     {
       Delete $i from array 
      }
  else
     {
     $i
     }
 } 

 $csvArray | Export-Csv c:\emaillist.txt -force


 Write-Host "Press any key to continue ..."

$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

`

【问题讨论】:

    标签: arrays powershell csv


    【解决方案1】:
    $CsvArray = Import-Csv $csv -Header Lastname,Firstname,Department,Phonenumber,Email |
    Where-Object { $_.Lastname -ne $null -and $_.Firstname -ne $null -and $Email -ne $null } |
    Export-Csv C:\emaillist.txt -force
    

    【讨论】:

    • 你可以把中间的那位缩短到?{$_.Lastname -and $_.Firstname -and $_.Email} ...可能只是我,但当我Export-CSV时我总是使用-NoTypeInfo
    • 我在发布此代码后更改了代码以具有 $_.Lastname 等,并且它似乎运行,但我没有得到任何回报,除非我将代码放在第一个 if 语句中。我尝试了您的解决方案,它比我尝试做的更精简,但它也给了我一个空白文件。因此,情况似乎无法正常工作。我知道我有很多条目要么没有电子邮件,要么没有名字和姓氏
    • 我会改变条件来测试它——从 Where-Object 中的 $_.Lastname -ne $null 开始。假设你得到了输出,那么这只是一个微调你的条件的问题。
    • 它们可能没有空值,而是空字符串。尝试 ![String]::IsNullOrEmpty($_.Lastname) 而不是 $_.Lastname -ne $null。
    • 好吧,![String]::IsNullOrEmpty() 太棒了,为什么我以前从未见过这个?谢谢你,KevinD,我以前遇到过空字符串,以前总是不得不用丑陋和笨拙的脚本假装过去。
    猜你喜欢
    • 1970-01-01
    • 2013-06-05
    • 2023-04-11
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    相关资源
    最近更新 更多