2013-07-29 35 views
9

Tôi là người mới sử dụng kịch bản PowerShell. Tôi đang tìm cách đáp ứng một trong những yêu cầu của tôi.Cách đọc một dòng từ một tệp trong PowerShell

Tôi có một hosts file có nhiều tên máy chủ và địa chỉ IP. Dưới đây là ví dụ về tệp đầu vào.

127.0.0.1 Host1 Host2 Host3 

127.0.0.2 Host4 Host5 Host6 

Tôi muốn đọc từng dòng và ping cho máy chủ đầu tiên (Host1), sau đó là máy chủ thứ hai (Host2) và sau đó là máy chủ thứ ba (Host3).

Trong khi ping từng tên máy chủ, tôi cần kiểm tra địa chỉ IP phản hồi ping cho máy chủ đó và khớp lại với địa chỉ IP được đề cập trong tệp đầu vào. Dưới đây là đoạn mã mà tôi đang cố gắng đọc tệp ở định dạng trên, nhưng nó không hoạt động theo cách đó.

$lines = Get-Content myfile.txt 
    $lines | 
    ForEach-Object{ 
     Test-Connection $_.Split(' ')[1] 
    } 

Có ai có thể cho tôi lời khuyên hoặc roi cái gì đó trong tập lệnh PowerShell cho tôi không?

Trả lời

1

Tôi chưa bao giờ thấy bất kỳ thứ gì từ PowerShell, nhưng ý tôi là nó có thể hữu ích cho bạn. Something như sau:

foreach ($line in $lines.Split('\r\n')){ 
    Test-Connection $line.Split(' ')[1] 
} 

http://en.wikipedia.org/wiki/Newline

+0

Cảm ơn brnopcman, Nhưng lỗi được cho là chức năng phân tách chỉ được chứa trong System.Object []. Nó không thể được sử dụng cho mỗi người. – sharsour

+0

ok, tôi tìm thấy một cái gì đó khác: http://stackoverflow.com/questions/4192072/how-to-process-a-file-in-powershell-line-by-line-as-a-stream –

14

Hãy thử các cách sau đây. Nó sẽ được đóng lại.

$lines = Get-Content myfile.txt | Where {$_ -notmatch '^\s+$'} 
foreach ($line in $lines) { 
    $fields = $line -split '\s+' 
    $ip = $fields[0] 
    $hosts = $fields[1..3] 
    foreach ($h in $hosts) { 
     $hostIP = (Test-Connection $h -Count 1).IPV4Address.ToString() 
     if ($hostIP -ne $ip) { "Invalid host IP $hostIP for host $h" } 
    } 
} 
+0

'Kiểm tra -Kết nối' sẽ sử dụng IP từ tệp máy chủ kể từ lần đầu tiên theo thứ tự độ phân giải vì vậy tôi nghĩ rằng nó sẽ luôn khớp với những gì trong tệp lưu trữ. –

+0

Cảm ơn Keith, tôi đã thử chạy kịch bản của bạn nhưng nó đang đưa ra các vấn đề dưới đây. Không thể ghi đè lên Máy chủ biến vì nó là chỉ đọc hoặc không đổi. Tại D: \ CEP \ TestScript.ps1: 6 char: 12 + foreach <<<< ($ host trong $ hosts) { + CategoryInfo: WriteError: (Máy chủ: Chuỗi) [], SessionStateUnauthorizedAccessException + FullyQualifiedErrorId: VariableNotWritable – sharsour

+0

@sharsour doh, sử dụng tên của biến tích hợp. Tôi đã sửa nó. –

Các vấn đề liên quan