检查远程计算机上的文件中的文本

时间:2017-02-21 09:15:02

标签: powershell

我正在使用powershell来查询远程计算机C驱动器上的文件,如果文件存在且状态为“已完成映像”,则应运行其他检查。

$filetofind = Get-Content C:\Image.log

#Get the list down to just imagestatus and export
foreach ($line in $filetofind)
    {
    $file = $line.trim("|")
    echo $file >> C:\jenkins\imagestatus.txt
    }

但是当我在命令下运行时,我收到错误。 有人可以帮忙吗?

Get-Content : Cannot find path 'C:\Image.log' because it does not exist.
    At line:18 char:15
    + $filetofind = Get-Content C:\Image.log
    +               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : ObjectNotFound: (C:\Image.log:String) [Get-Content], ItemNotFoundException
        + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

1 个答案:

答案 0 :(得分:2)

Test-Path将检查文件是否存在,Select-String可用于在文件中搜索字符串,使用-Quiet参数将使命令返回True如果找到该字符串,而不是返回包含该字符串的文本文件中的每一行。

然后在简单的if语句中使用这两个命令来检查它们的状态:

$file = "C:\Image.log"
$searchtext = "imaging completed"

if (Test-Path $file)
{
    if (Get-Content $file | Select-String $searchtext -Quiet)
    {
        #text exists in file
    }
    else
    {
        #text does not exist in file
    }
}
else
{
#file does not exist
}

修改

要检查多台计算机上的文件,您需要使用foreach循环分别针对每台计算机运行代码。以下假设您在hostnames.txt中每行有一个主机名。

$hostnames = Get-Content "C:\hostnames.txt"
$searchtext = "imaging completed"

foreach ($hostname in $hostnames)
{
    $file = "\\$hostname\C$\GhostImage.log"

    if (Test-Path $file)
    {
        if (Get-Content $file | Select-String $searchtext -quiet)
        {
            Write-Host "$hostname: Imaging Completed"
        }
        else
        {
            Write-Host "$hostname: Imaging not completed"
        }
    }
    else
    {
        Write-Host "$hostname: canot read file: $file"
    }
}