Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ForEach-Powershell在计算机列表中搜索以查找文件中的字符串_Powershell_For Loop_Powershell 2.0_Powershell 3.0_Powershell Remoting - Fatal编程技术网

使用ForEach-Powershell在计算机列表中搜索以查找文件中的字符串

使用ForEach-Powershell在计算机列表中搜索以查找文件中的字符串,powershell,for-loop,powershell-2.0,powershell-3.0,powershell-remoting,Powershell,For Loop,Powershell 2.0,Powershell 3.0,Powershell Remoting,我试图在文本文件中的计算机主机文件中查找字符串。我想检查文本文件中的每台机器是否有主机文件中的更改 出于安全目的,我无法放入我正在搜索的实际字符串。我对PowerShell非常陌生,我曾尝试在CMD中执行此操作,但无法获得所需的输出 $sys = Get-Content .\Systems.txt $Loc = "\\$sys\c$\Windows\System32\Drivers\etc\hosts" $SearchStr = "string" $sel = Select-String -pa

我试图在文本文件中的计算机主机文件中查找字符串。我想检查文本文件中的每台机器是否有主机文件中的更改

出于安全目的,我无法放入我正在搜索的实际字符串。我对PowerShell非常陌生,我曾尝试在CMD中执行此操作,但无法获得所需的输出

$sys = Get-Content .\Systems.txt
$Loc = "\\$sys\c$\Windows\System32\Drivers\etc\hosts"
$SearchStr = "string"
$sel = Select-String -pattern $SearchStr -path $Loc


ForEach ($System in $sys) {
    If ($sel -eq $null)
    {
        write-host $sys NotFound
    }
        Else 
    {
        write-host $sys Found
    } 
}

你离得不远,你只需要重新考虑一下你的ForEach循环。在循环中移动您的
$Loc=
行,使其针对每个系统进行更新,然后跳过
$sel=
行,只需将其放入
检查中,即可设置:

$sys = Get-Content .\Systems.txt
$SearchStr = "string"

ForEach ($System in $sys) {
    $Loc = "\\$system\c`$\Windows\System32\Drivers\etc\hosts"
    If (Select-String -pattern $SearchStr -path $Loc -Quiet)
    {
        write-host "$system Found"
    }
        Else 
    {
        write-host "$system Not Found"
    } 
}

我还在
c$
的路径中转义了美元符号。我认为在这种情况下不需要这样做,但一般来说,在使用美元符号时,这是一种很好的做法,您希望在这样的字符串中实际使用美元符号。

我测试了您所做的更改,但它仍然不能正常工作。我不知道为什么,但我得到一个错误,路径无法连接到。我知道这些机器是在线的,因为我首先对它们进行了ping扫描。这个脚本完全有道理,所以应该没有理由不起作用。它使用搜索字符串“127.0.0.1”对我起作用,并在我试用过的两个系统上找到它。您对您尝试连接的计算机具有管理员权限吗?您通常需要本地管理员权限才能连接到c$管理共享。是的,我们对所有计算机都有管理员权限。奇怪的是。当我在CMD中做同样的事情时,我得到了几乎相同的错误。我使用了'psexec-sh',直到那时我才能找到字符串;我只是没有得到我需要的输出。明天,我将对此进行一些修改,以使用psexec。谢谢你的更新。所以,没有psexec,这一切都能正常工作。问题最终是我的用户错误。