2014-09-04 145 views
0

如何閱讀使用get-content的csv列?如何閱讀列中的csv內容

+0

雖然你想幫助社區是令人欽佩的。 'Import-CSV'和'Where-Object'都有很好的文檔。你有問題嗎?否則我沒有看到這增加了社區的價值。你的代碼中很大一部分也可以簡化。 – Matt 2014-09-04 16:23:22

+0

您需要對其進行編輯以使其符合堆棧溢出格式。以問題的形式更改您的帖子,然後將您的腳本作爲單獨的答案提供。通常情況下,我會爲你編輯,但由於我不想爲你的工作留下功勞,所以我需要等待你自己來做。在此之前,我投票結束。 – 2014-09-04 16:25:10

+0

更正。對於那個很抱歉。 – Fidelis 2014-09-04 17:32:28

回答

0

在過去的一週中,我需要閱讀csv文件中的列,並且遇到了一些麻煩。然後我發現了讀取頭行的import-csv。所以我創建了一個腳本並希望給予其他人,以便他們也可以使用它。

Where-Object {$_.Severity -eq 5 -or $_.Severity -eq 4 -and $_.OS -like "Windows*" } 

這個腳本讀取包含「IP」 csv文件的行,「可利用性」,「OS」和「嚴重性」,那麼,使用這樣的位置對象方法解析文件

這裏是腳本 - 修改和請欣賞:

#load assembly for file dialog box 
[System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms") | Out-Null; 


#File dialog box to browse to file. 
function diagbx() 
{ 
    $OpenFileDialog = New-Object System.Windows.Forms.OpenFileDialog 
    $OpenFileDialog.initialDirectory = $initialDirectory 
    $OpenFileDialog.filter = "Comma Separated Value (*.csv)|*.csv 
    $OpenFileDialog.ShowDialog() 
    $OpenFileDialog.filename 
} 

#get the results of the function 
$file = diagbx; 

#Check to see if diag was cancled. 
if ($file[0] -eq "Ok") 
{ 
    #get the content of the file 
    $content = Import-Csv $file[1] 

    #create empty array variable to be accessed outside of conditional statement. 
    $ip = @() 

    #loop content and build into array 
    for ($i = 0; $i -lt $content.Count; $i++) 
    { 
     #Get data with only specified elements 
     $list = $content[$i] | Select-Object IP, Exploitability , OS , Severity | Where-Object {$_.Severity -eq 5 -or $_.Severity -eq 4 -and $_.OS -like "Windows*" } 

     #Check to see if the variable is not empty. 
     if ($list) 
     { 
      #Look up the IP Address and set in the array variable 
      $ip += [System.Net.Dns]::GetHostByAddress($list.ip).HostName.ToString() 
     } 
    } 

    #clean duplicate entries 
    $ip = $ip | select -Unique 

    #output to a txt file. 
    $ip | Out-File c:\List.txt -Append 
} 

#if cancled, notify the user and wait for a key press 
Else 
{ 
    #write a notification to a user 
    Write-Host "You have cancled the request.`n `nPress any key to continue..."; 

    #hold for a key press 
    $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") 
}