我正在使用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
答案 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"
}
}