相关疑难解决方法(0)

如何在PowerShell中将输出捕获到外部进程的变量中?

我想运行一个外部进程并将其命令输出捕获到PowerShell中的变量.我目前正在使用这个:

$params = "/verify $pc /domain:hosp.uhhg.org"
start-process "netdom.exe" $params -WindowStyle Hidden -Wait
Run Code Online (Sandbox Code Playgroud)

我已经确认命令正在执行但我需要将输出捕获到变量中.这意味着我无法使用-RedirectOutput,因为这只会重定向到文件.

powershell process

140
推荐指数
7
解决办法
24万
查看次数

将PowerShell的默认输出编码更改为UTF-8

默认情况下,当您将命令的输出重定向到文件或将其传递到PowerShell中的其他内容时,编码为UTF-16,这是无用的.我想把它改成UTF-8.

它可以通过替换>foo.txt语法来逐个进行,| out-file foo.txt -encoding utf8但是每次都必须重复这是很尴尬的.

在PowerShell中设置内容的持久方法是将它们放入\Users\me\Documents\WindowsPowerShell\profile.ps1; 我已经验证这个文件确实是在启动时执行的.

有人说输出编码可以设置,$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}但我已经尝试过,它没有任何效果.

https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/谈到$OutputEncoding乍一看似乎应该是相关的,但后来谈到输出被编码在ASCII中,这不是实际发生的事情.

如何设置PowerShell使用UTF-8?

powershell utf-8 character-encoding

70
推荐指数
1
解决办法
8万
查看次数

将文本管道到外部程序会附加一个尾随换行符

我一直在比较多个系统之间的哈希值,并惊讶地发现PowerShells哈希值与其他终端的哈希值不同.

Linux终端(CygWin,Bash for Windows等)和Windows命令提示符都显示相同的哈希,而PowerShell显示不同的哈希值.

Linux_Vs_PShell_Hash_Compare.png

这是使用SHA256测试的,但在使用其他算法(如md5)时发现了同样的问题.

编码更新:

尝试更改PShell编码,但它对返回的哈希值没有任何影响.

[Console]::OutputEncoding.BodyName 
iso-8859-1
[Console]::OutputEncoding = [Text.UTF8Encoding]::UTF8
utf-8
Run Code Online (Sandbox Code Playgroud)

GitHub PowerShell问题

https://github.com/PowerShell/PowerShell/issues/5974

linux powershell hash newline pipe

7
推荐指数
1
解决办法
245
查看次数

如何在没有 BOM 的情况下重定向 PowerShell 中的输入?

我正在尝试通过以下方式重定向 PowerShell 中的输入:

Get-Content input.txt | my-program args
Run Code Online (Sandbox Code Playgroud)

问题是管道 UTF-8 文本前面有一个 BOM (0xEFBBBF),我的程序无法正确处理它。

一个最小的工作示例:

// File: Hex.java
import java.io.IOException;

public class Hex {
    public static void main(String[] dummy) {
        int ch;
        try {
            while ((ch = System.in.read()) != -1) {
                System.out.print(String.format("%02X ", ch));
            }
        } catch (IOException e) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 PowerShell 中:

javac Hex.java
Set-Content textfile "ABC" -Encoding Ascii
# Now the content of textfile is 0x41 42 43 0D 0A
Get-Content textfile | java Hex
Run Code Online (Sandbox Code Playgroud)

或者干脆 …

powershell encoding byte-order-mark pipe

6
推荐指数
2
解决办法
750
查看次数

在 PowerShell 中进行管道传输时,如何确保 Python 打印 UTF-8(而不是 UTF-16-LE)?

我想在通过管道传输(例如,文件)时将文本打印为 UTF-8,因此在 Windows 10 上的 Python 3.7.3 上通过 PowerShell,我这样做:

import sys

if not sys.stdout.isatty():
    sys.stdout.reconfigure(encoding='utf-8')

print("Mamma mia.")
Run Code Online (Sandbox Code Playgroud)

当 run as 时encodingtest.py > test.txttest.txt结果是这样的:

00000000  FF FE 4D 00 61 00 6D 00 6D 00 61 00 20 00 6D 00  ÿþM.a.m.m.a. .m.
00000010  69 00 61 00 2E 00 0D 00 0A 00                    i.a.......
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它以 开头FF FE,它是 UTF-16-LE 的字节顺序标记——并且在字符之间打印空字节(就像 UTF-16 那样)!但是,当我通过 CMD 而不是 PowerShell 运行它时,它可以很好地打印 UTF-8。即使通过 PowerShell 进行管道传输,我如何让 Python 打印 UTF-8?

我可以运行encodingtest.py …

python powershell utf-8 character-encoding

6
推荐指数
1
解决办法
80
查看次数

在PowerShell中使用通过管道一起传输的ffmpeg和ffplay

我已经将当前的视频项目从命令提示符切换到PowerShell,以便可以充分利用的Tee-Object多输出代码。

当前,我有一个可以批量工作的代码版本,但是我需要通过T型添加另一个功能。这是我第一次使用PowerShell,因此这可能是一个简单的修复方法...

目前,我已经弄清楚了如何在PowerShell中运行ffmpeg以及如何运行ffplay,并且我有一个批处理程序,该程序接受ffmpeg输出并将其通过管道传输到ffplay,并且效果很好。我也可以ffplay在PS中正常播放。在PS中,此代码有效:

ffplay -video_size 1280x720 -pixel_format uyvy422 -framerate 60 -i video="Decklink Video Capture"
Run Code Online (Sandbox Code Playgroud)

作为批处理,此代码可以很好地满足我的工作需求:

ffmpeg -video_size 1280x720 -pixel_format uyvy422 -framerate 60 -i video="Decklink Video Capture" -c:v libx265 -preset ultrafast -mpegts pipe: | ffplay pipe:
Run Code Online (Sandbox Code Playgroud)

它获取我想要的视频,然后通过管道将其播放到屏幕。但是,通过PowerShell播放时,视频甚至不会弹出。我没有收到任何警告或任何警告,它似乎运行良好,但没有显示图片。

最终目标是能够以全分辨率在主机显示屏上播放视频,并在网络中发布较低的比特率(如果有帮助的话)。

powershell pipeline ffmpeg

5
推荐指数
1
解决办法
571
查看次数

在命令提示符/ Windows Powershell(Windows 10)中使用UTF-8编码(CHCP 65001)

我已经chcp 65001在命令提示符和Windows Powershell中强制使用了一段时间,但是从SO和其他几个社区的问答环节来看,这似乎是一种危险且低效的解决方案。Microsoft是否提供一种chcp 65001可以永久保存而无需手动更改注册表的改进/完整替代方案?如果没有,将来是否有公开宣布的时间表或议程来支持Windows CLI中的UTF-8?

我个人已经使用了chcp 949韩国字符支持,但反斜线的怪异显示\在多个应用程序(如Neovim),以及字符和不正确/难以理解的显示器是不是韩国未通过支持949似乎变得更加的最近有问题。

windows powershell utf-8 console-application

5
推荐指数
2
解决办法
3580
查看次数

Powershell 中换行符的 `r`n 和 `n 有什么区别?

我知道windows和unix中有不同的换行代码。但在 Powershell 中, 和 都`r`n用于`n换行。是否有从`n到 的自动转换`r`n?为什么必须使用引号而不是反斜杠?

powershell newline line-breaks

5
推荐指数
2
解决办法
2万
查看次数

CMD管道与Powershell管道不同?

我正在尝试将 Node.js 输出通过管道传输到 preatty-pino

node .\dist\GameNode.js | pino-pretty

在 CMD 中运行它我得到了我的格式化输出但是在 powershell 中运行它我什么也得不到。我读到 Powershell 在管道时正在使用对象,所以我试过了

node .\dist\GameNode.js | Out-String -Stream | pino-pretty

但这也行不通。

为什么它可以在 CMD 中工作,而不能在 Powershell 中工作?谢谢 :)

powershell cmd pipe

5
推荐指数
1
解决办法
127
查看次数

在命令提示符和 PowerShell 中运行 C++ 程序的区别

在 C 和 C++ 命令行程序中,在命令提示符或 PowerShell 中运行程序之间有什么区别吗?(例如:异常处理、I/O 速度等)

c c++ powershell command-prompt

4
推荐指数
1
解决办法
97
查看次数

使用 UTF-8 编码的 Powershell 字符串变量

我检查了许多与此相关的问题,但找不到解决我的问题的东西。基本上,我想将 UTF-8 编码的字符串存储在变量中,然后使用该字符串作为文件名。

\n\n

例如,我正在尝试下载 YouTube 视频。如果我们打印视频标题,则会显示非英文字符(ytd这里是youtube-dl):

\n\n

./ytd https://www.youtube.com/watch?v=GWYndKw_zbw -e

\n\n

输出:[LEEPLAY] \xec\x8b\x9c\xed\x8b\xb0\xed\x8c\x9d \xec\x9e\x85\xeb\xac\xb8 City Pop MIX (Playlist)

\n\n

但是如果我将其存储在变量中并打印它,韩文字符将被忽略:

\n\n

$vtitle= ./ytd https://www.youtube.com/watch?v=GWYndKw_zbw -e

\n\n

$vtitle

\n\n

输出:[LEEPLAY] City Pop MIX (Playlist)

\n

powershell character-encoding youtube-dl windows-10

3
推荐指数
1
解决办法
1万
查看次数

如何在不等待第一个命令完成的情况下进行管道传输?

我正在尝试将输出日志通过管道传输到另一个脚本进行处理。但是,如果我正确理解这个问题,powershell 会等待第一个命令完成,然后再将输出发送到第二个命令。

例如,这按预期工作(脚本收到“hi”),因为echo很快完成:

echo "hi" | python script.py
Run Code Online (Sandbox Code Playgroud)

而在这个(caddy是网络服务器,所以它没有完成)中,球童的标准输出永远不会到达脚本的标准输入:

caddy run | python script.py
Run Code Online (Sandbox Code Playgroud)

是否可以将第一个命令的输出异步转发到第二个命令,而无需等待第一个命令完成?

--

编辑:最小的例子

echo "hi" | python script.py
Run Code Online (Sandbox Code Playgroud)
caddy run | python script.py
Run Code Online (Sandbox Code Playgroud)
# output.py

from time import sleep

while True:
    print("SENDING")
    sleep(1)
Run Code Online (Sandbox Code Playgroud)

这有效(打印到 stdout Received: SENDING):

python onetime.py | python input.py
Run Code Online (Sandbox Code Playgroud)

这不起作用(没有打印任何内容):

python output.py | python input.py
Run Code Online (Sandbox Code Playgroud)

powershell

3
推荐指数
1
解决办法
299
查看次数