关于Windows 7:等效于“ tail”命令的Powershell ALMOST可远程工作


Powershell equivalent of the “tail” command ALMOST works remotely

我正在寻找与Windows 7等效的" tail"命令,并认为我已经在与Powershell等效的设备中找到了它-

1
    C:\>powershell -command"& {Get-Content file.txt | Select-Object -last 100}"

如果我在自己的Windows 7 PC上的CMD提示符中使用此命令,则返回的信息很好。 我什至可以将其输入/附加到另一个文件中。

但是,当我通过openSSH远程登录到另一台PC时,该命令有效,但它从未使我退回到命令提示符-在显示文件的最后100行后挂起。 这意味着这不适用于我要为约300台远程Windows 7 PC编辑的批处理文件。

有任何想法吗?


尝试了许多在线上找到的不同建议后,最终发现了一个可行的建议!

答案在批处理文件本身内。我的调用此Powershell行的批处理文件就是这样的:

1
2
    Powershell.exe -noprofile -executionpolicy Bypass C:\log\Tail.ps1
    :end

同样,如果您要在希望从其运行/获取信息的PC上使用它,则效果很好。但不是遥不可及的。终于发现您只需要在批处理文件中对Powershell的调用末尾添加"

1
2
    Powershell.exe -noprofile -executionpolicy Bypass C:\log\Tail.ps1 <nul
    :end

什么是其他人写的是什么最后是有意义的:"我的研究表明,PowerShell的运行脚本的命令通过-File开关指示,然后从标准输入额外的PowerShell命令等待(我简短的实验与-Command开关通过将标准输入重定向到nul,PowerShell完成执行脚本并从标准输入中"读取文件结尾"后,PowerShell退出。"

在此页面的此处找到-Powershell脚本被卡住,从批处理文件调用时不退出
因此功劳实际上归@Gordon Smith


根据文档,由于您使用-command"..."运行命令,因此您需要指定-noexit标志以阻止命令运行后退出powershell。

1
powershell -command"& {Get-Content file.txt | Select-Object -last 100}" -noexit

当您将其添加到批处理文件中时,您可能还需要-noprofile和-noninteractive-尽管对于远程命令,您可能希望生成一个过程以更好地控制和进行错误处理。另外,如果这不起作用,则问题可能出在OpenSSH处理某些事情上(这在具有远程连接的测试服务器上对我有效)