2012-01-25 40 views
0

我檢索主機服務器上的文件與5 DNS條目:PowerShell的:試圖使用匹配可變針對陣列獲取內容

C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主機

我的是這樣的意見後:

127.0.0.1 infspcpd8tx8e.rtmphost.com

127.0.0.1 infspkbpef39p.rtmphost.com

127.0.0.1 infspo99vn3ti.rtmphost.com

127.0.0.1 infspqx6l10wu.rtmphost.com

127.0.0.1 infspvdkqjhkj.rtmphost.com

在我的hosts文件,我認爲他們是5號線在彼此之上,但是當我粘貼它時,它在中間有一個空間。當我在該文件上使用get-content時,這是一樣的,但我不希望阻止我。

所以我有一個這樣得到的數組: $ ACCOUNTS = Get-ChildItem「D:\ cyst \ accounts \」|選擇名稱

然後,我試着通過檢查$ accounts變量來檢查hosts文件中是否有重複的條目,以檢查包含hosts文件的數組。

foreach ($rtmp in $ACCOUNTS) { 
     $HostsFile = Get-Content C:\Windows\System32\drivers\etc\hosts | ForEach-Object {[System.Convert]::ToString($_)} 
     #$rt[string]$data = $HostsFile 
     [string]$rtmpfull = $rtmp.name + ".rtmphost.com" 

      if ($HostsFile -contains $rtmpfull) { Write-Host "Host found in hosts file moving on..." } 

       else { echo "wrong" 

       } 
     } 

它永遠不會匹配,並總是返回false,我無法匹配任何東西..請幫助 - 這是一個類型問題?我已經使用了這個日期,但現在我絕望了,在這裏發佈。

回答

0
$ACCOUNTS = Get-ChildItem "D:\cyst\accounts\" 

foreach ($rtmp in $ACCOUNTS){ 
    $found=$FALSE 
    foreach ($line in (gc C:\Windows\System32\drivers\etc\hosts)){ 
     if(($line -match $rtmp) -and ($found -eq $TRUE)){ 
      echo "$($matches[0]) is a duplicate" 
     } 
     if (($line -match $rtmp) -and ($found -eq $FALSE)){ 
      echo "Found $($matches[0]) in host file..." 
      $found=$TRUE 
     } 
    } 
} 

不優雅,但它會做的工作。

+0

謝謝你這是一個新鮮的角度=) –

0

這個測試:

if ($HostsFile -contains $rtmpfull) 

正在尋找$ rtmpfull匹配存儲在$ hosts文件的整條生產線。你想檢查像這樣的部分匹配;

if ($HostsFile | Foreach {$_ -match $rtmpfull}) 

順便說一句,你可以簡化這個:

$HostsFile = Get-Content C:\Windows\System32\drivers\etc\hosts | ForEach-Object {[System.Convert]::ToString($_)} 

到:

$HostsFile = Get-Content C:\Windows\System32\drivers\etc\hosts 

默認情況下,獲取內容會給你一個字符串數組,其中數組的每一個元素對應文件中的一行。

+0

謝謝,但我仍然有一些問題在這裏..所以.. 我得到的hosts文件,如下所示: $ hosts文件=獲取內容C:\ WINDOWS \ SYSTEM32 \ DRIVERS \等\主機 它包含與上述相同的列表。 後來我做$ hosts文件 - 包含$ rtmpfull $ rtmpfull是「127.0.0.1'tinfspvdkqjhkj」 我甚至嘗試匹配標籤或單詞或幾句話並沒有什麼,甚至整條生產線。如果我做 $ hosts文件 - 包含「127.0.0.1」連帶TRUE 我在該行發現,但換句話說,我得到FALSE Oy公司合租嘿嘿 –

+0

如果($ hosts文件| {的foreach $ _ -match $ rtmpfull}) 這救了我的屁股。我希望我可以減少飢餓的表現,但是謝謝你! –

+0

哦,現在我得到了所有的誤報。 –

2

我想你可以通過忽略foreach來加快速度。

(Get-Content C:\Windows\System32\drivers\etc\hosts) -match [regex]::escape($rtmpfull) 

應該一次匹配整個主機文件。