0

This is a csv example:

1- 2018-11-07,hostname-184,IP_INFO, 10.2334.40.334, 255.255.255.0, 
2 - 2018-11-07,hostname-184,IP_INFO, 334.204.334.68, 255.255.255.0,
3- 2018-11-07,hostname,7.1.79-8,IP_INFO, 142.334.89.3342, 255.255.255.0,
4- 2018-11-07,hostname,7.1.80-7,IP_INFO, 13342.221.334.87, 255.255.255.0, 
5- 2018-11-07,hostname-155,IP_INFO, 142.2334.92.212, 255.255.255.0, 
6 - 2018-11-07,hostname-184,IP_INFO, , , 1
7- 2018-11-07,hostname-184,IP_INFO, 10.19334.60.3343, 255.255.255.0, 

so how can i check if the las two spaces are in blank (like line 6 ) ?

The idea is to use something like this:

    $contentdnsparsed = Get-Content $destination_RAW_NAS\DNS_NAS_PARSED_0 

For($i=0;$i -lt $contentdnsparsed.count;$i++){
if($contentdnsparsed[$i] -match "running")
    {

 $Global:MatchDNS = $OK } Else {$Global:MatchDNS = $FAIL }

    }

If match "something" in the space 4 and 5 after the "," output = OK else = FAIL.

Thank you guys

2
  • Your whole sample csv has no text running - so how could that work? I'd use Import-Csv and supply header names. Commented Nov 9, 2018 at 19:23
  • if the lines are consistent with the pattern you show, then you can test for -match ', , ,' to id the line with missing data. that will match [or -notmatch] on three commas delimited by a single space. Commented Nov 9, 2018 at 19:32

1 Answer 1

5

Although you give us a rather bad example of a CSV file, you should use the Import-Csv cmdlet. Because the csv has no headers, you need to supply these with the -Header parameter like below:

$csvContent = Import-Csv -Path "$destination_RAW_NAS\DNS_NAS_PARSED_0" -Header @("Date","HostName", "InfoType","IPAddress","Subnet")
$csvContent | ForEach-Object {
    # test for empty IPAddress fields in the CSV
    if ([string]::IsNullOrEmpty($_.IPAddress)) {
        Write-Host "$($_.HostName) = FAIL" -ForegroundColor Red
        # somewhere in your code you have declared the variables $Global:MatchDNS, $FAIL and $OK I guess..
        $Global:MatchDNS = $FAIL
    }
    else {
        Write-Host "$($_.HostName) = OK" -ForegroundColor Green
        $Global:MatchDNS = $OK
    }
}

Hope that helps

Sign up to request clarification or add additional context in comments.

3 Comments

[string]::IsNullOrWhiteSpace() may work better here than [string]::IsNullOrEmpty().
@BaconBits I disagree that [string]::IsNullOrWhiteSpace() would be better here, because the whitespace in the csv is not enclosed in quote characters (as if it IS the fields value), and therefore it is 'eaten' by the Import-Csv cmdlet. It's effect wil be the same here.
Yeah, but if the file is ever field quoted because something changed upstream, the script will unexpectedly work differently. It's not like it's a well-documented, guaranteed behavior of Import-Csv; it's just an implementation detail. It's not like String.IsNullOrWhiteSpace() should be avoided for performance or compatibility reasons, either. The bottom line is, "Do I ever want to treat a string that contains nothing but whitespace as though it were a valid IP address?" and that answer is going to be, "No, that's not ever going to be a valid IP address." So code for it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.