Powershell:尝试使用Get-Content将变量与数组匹配

时间:2012-01-25 23:34:14

标签: arrays powershell contains

我正在检索具有5个DNS条目的服务器上的hosts文件:

C:\ Windows \ System32下\驱动程序\等\主机

评论后,我的样子如下:

  

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

在我的主机文件中,我将它们看作是彼此顶部的5行,但是当我将它粘贴在此处时,它之间有一个空格。当我在该文件上使用get-content时,这是相同的,但我不希望这会阻止我。

所以我有一个像这样的数组: $ ACCOUNTS = Get-ChildItem“D:\ cyst \ accounts \”|选择名称

然后我通过检查$ accounts变量来检查主机文件中是否有重复的条目,该变量是针对包含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,我无法匹配任何东西..请帮忙 - 这是一个类型问题吗?我已经用谷歌搜索了DAYS,但现在我很绝望并在这里发帖。

3 个答案:

答案 0 :(得分:2)

我认为你可以通过省略foreach来加快速度。

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

应该立即匹配整个hosts文件。

答案 1 :(得分:0)

这个测试:

if ($HostsFile -contains $rtmpfull)

正在寻找$ rtmpfull以匹配存储在$ HostsFile中的整行。你想检查像这样的部分匹配;

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

BTW你可以简化这个:

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

为:

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

默认情况下,Get-Content会为您提供一个字符串数组,其中数组的每个元素都对应于文件中的一行。

答案 2 :(得分: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
        }
    }
}

不优雅,但它会起作用。