Как удалить всю строку, когда любое поле CVS является пустым в powershell? - PullRequest
1 голос
/ 14 апреля 2020

ProcessName UserName             PSComputerName

AnyDesk     NT-AUTORITÄT\SYSTEM  localhost
csrss                            dc-01
ctfmon      SAD\Administrator    rdscb-01
            SAD\Administrator    srv-01

Удалить второй и последний ряд здесь

Ответы [ 2 ]

5 голосов
/ 14 апреля 2020

На основании ваших комментариев, если $data читается из CSV-файла и содержит пользовательские объекты, вы можете сделать следующее:

$data | where { $_.PsObject.Properties.Value -notcontains $null -and $_.PsObject.Properties.Value -notcontains '' }

Это будет применяться к каждому свойству и не требует ввода именованные свойства.

1 голос
/ 14 апреля 2020

Есть более изящные способы, но вот некрасивый ответ, чтобы проиллюстрировать это ...

$Data = @"
"ProcessName","UserName","PSComputerName"
"AnyDesk","NT-AUTORITÄT\SYSTEM","localhost"
"csrss","","dc-01"
"ctfmon","SAD\Administrator","rdscb-01"
 "","SAD\Administrator","srv-01"
"@ | Out-File -FilePath 'D:\Temp\ProcData.csv'

$headers = (
    (Get-Content -Path 'D:\Temp\ProcData.csv') -replace '"','' | 
    select -First 1
) -split ','

$data    = Import-Csv -Path 'D:\Temp\ProcData.csv'
$colCnt  = $headers.count
$lineNum = 0

:newline
foreach ($line in $data)
{
    $lineNum++
    for ($i = 0; $i -lt $colCnt; $i++)
    {
        # test to see if contents of a cell is empty
        if (-not $line.$($headers[$i]))
        {
            Write-Warning -Message "$($lineNum): $($headers[$i]) is blank"
            continue newline
        }
    }
    "$($lineNum): OK"
    # Perform other actions with good data
}

<#
# Results

1: OK
WARNING: 2: UserName is blank
3: OK
WARNING: 4: ProcessName is blank
#>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...