gpt4 book ai didi

PowerShell:在标准输出中选择字符串?

转载 作者:行者123 更新时间:2023-12-02 23:29:32 26 4
gpt4 key购买 nike

PS C:\squid\sbin> .\squid.exe -v
Squid Cache: Version 2.7.STABLE8
configure options: --enable-win32-service --enable-storeio='ufs aufs null coss' --enable-default-hostsfile=none --enable
-removal-policies='heap lru' --enable-snmp --enable-htcp --disable-wccp --disable-wccpv2 --enable-useragent-log --enable
-referer-log --enable-cache-digests --enable-auth='basic ntlm digest negotiate' --enable-basic-auth-helpers='LDAP NCSA m
swin_sspi squid_radius_auth' --enable-negotiate-auth-helpers=mswin_sspi --enable-ntlm-auth-helpers='mswin_sspi fakeauth'
--enable-external-acl-helpers='mswin_ad_group mswin_lm_group ldap_group' --enable-large-cache-files --enable-digest-aut
h-helpers='password LDAP eDirectory' --enable-forw-via-db --enable-follow-x-forwarded-for --enable-arp-acl --prefix=c:/s
quid
Compiled as Windows System Service.
PS C:\squid\sbin> .\squid.exe -v|Select-String Squid
squid.exe -v将输出其版本信息,其中包含关键字“Squid”。

我想让 powershell 告诉我输出中是否存在关键字“Squid”。所以我使用 .\squid.exe -v|Select-String Squid ,但它什么都不输出。

正确的做法是什么?我正在使用 PS 3.0。

最佳答案

你这样做是正确的:)

问题不在于您的代码,而在于鱿鱼端口本身。将文本写入控制台到 PowerShell 和 cmd 无法通过 stdout/stderr 流捕获它的地方做了一些奇怪的事情。我猜测它可能不是使用 stdout/stderr api 而是直接在控制台上操作字符或其他东西。我尝试将 stderr 重定向到 stdout( 2>&1 ),但这也不起作用。

它带有一个更改日志文本文件,我想你可以改为解析它......

编辑——

或者您可以使用这个笨拙但有用的解决方法来抓取控制台文本:

function Get-ConsoleText {
if ($host.Name -eq 'ConsoleHost') {
$text_builder = new-object system.text.stringbuilder
$buffer_width = $host.ui.rawui.BufferSize.Width
$buffer_height = $host.ui.rawui.CursorPosition.Y
$rec = new-object System.Management.Automation.Host.Rectangle 0,0,($buffer_width -2), $buffer_height
$buffer = $host.ui.rawui.GetBufferContents($rec)

$console_out = @()
for($i = 0; $i -lt $buffer_height; $i++) {
$text_builder = new-object system.text.stringbuilder
for($j = 0; $j -lt $buffer_width; $j++) {
$cell = $buffer[$i,$j]
$text_builder.Append($cell.Character) | Out-Null
}
$console_out += $text_builder.ToString()
}
return $console_out
}
}

cls; .\squid.exe -v; Get-ConsoleText |
ForEach-Object {
if ($_ -match 'Version (.+)') {$matches[1]}
}

关于PowerShell:在标准输出中选择字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17897852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com