【问题标题】:delete a matched string in a condition, PowerShell删除条件中的匹配字符串,PowerShell
【发布时间】:2019-04-26 08:50:54
【问题描述】:

这个想法是导入一个csv,然后如果值“infohostname”包含一个null或withespace删除整行

    Function Last_NAS_Parse {

$Import_IP = Import-Csv -Path "$destination_RAW_NAS\audit_nas_8_$((Get-Date).ToString('yyyy-MM-dd')).txt" -Header @("date","infohostname","Version","SMTP","Value_1","Value_2","Value_3","Value_4","Value_5","Value_6","Value_7","Value_8","Value_9")
$Import_IP | ForEach-Object {
   if ( [string]::IsNullOrWhiteSpace($_.infohostname)


  }

但是不知道如何删除选中后的行,谢谢。

【问题讨论】:

  • 首先,您的代码缺少括号和方括号,以便按照发布的方式进行编译。您的目标是从文件中删除整行,还是简单地清除它?
  • @trebleCode 这个想法只是从文件中删除整行

标签: powershell csv parsing text-parsing


【解决方案1】:

IMO 你不需要一个函数,只需要一个Where-Object

$Header = ("date","infohostname","Version","SMTP","Value_1","Value_2","Value_3","Value_4","Value_5","Value_6","Value_7","Value_8","Value_9")
$Import_IP = Import-Csv -Path "$destination_RAW_NAS\audit_nas_8_$((Get-Date).ToString('yyyy-MM-dd')).txt" -Header $Header | 
   Where-Object {![string]::IsNullOrWhiteSpace($_.infohostname)}

当然你可以把它包装在一个函数中
(但没有传递参数和返回值的函数不是真正的函数)

【讨论】:

    【解决方案2】:

    遍历结果并仅存储布尔评估为真的对象,然后创建一个新文件。为了删除现有文件的行,我相信您必须将其转换为 XLS/X 并将其作为 COM 对象访问

    $results = @()
    Function Last_NAS_Parse {
    
        $Import_IP = Import-Csv -Path C:\path\to\file.csv
        $Import_IP | ForEach-Object {
            if ( [string]::IsNullOrWhiteSpace($_.infohostname)) 
            {
                Out-Null
            }
            else
            {
                $results += $_
            }
        }
    }
    
    Last_NAS_Parse
    $results | Export-CSV "C:\export\path\of\newfile.csv"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2018-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多