在cmd (和bash)中,管道"|“以第一个命令的输出(作为字符串)的原始格式将输出推送到另一个命令。
在PowerShell中,出管道的所有东西都是一个对象(甚至一个字符串也是一个字符串对象)。
因此,某些命令在PowerShell命令窗口中运行时会失败,而不是在Windows命令窗口中运行。
示例:
dir c:\windows | gzip > test.gz当该命令在Windows命令提示符窗口中运行时,它正常工作- C:\windows的目录列表被压缩到test.gz文件中。
PowerShell中的相同命令会失败,因为PowerShell不使用cmd样式的管道,并将其替换为PowerShell管道(处理文件系统项数组)。
Q.如何禁用PowerShell中的默认管道行为以使传统的PowerShell命令在PowerShell中相同工作?
我试着在管道"`“之前使用转义字符"`|",但没有起作用。我也尝试过invoke-expression -command "command with | here",但也失败了。
发布于 2011-03-15 21:36:45
如果要在管道中发送字符串,可以使用cmdlet "out-string“。
例如:
get-process | out-string如果您正在专门寻找一种PowerShell方式来压缩文件,请查看PowerShell社区扩展。有一堆cmdlet可以压缩和解压缩所有类型的文件。
http://pscx.codeplex.com
发布于 2011-03-16 14:54:41
如果您可以将(CMD) dir的输出输送到gzip中,那么gzip显然知道如何解析dir输出。PowerShell dir命令的(string)输出(又名Get)看起来不一样,因此gzip很可能无法解析它。但是,我也猜到gzip很乐意列出路径列表,所以这可能会奏效:
dir c:\windows | select -ExpandProperty FullName | gzip > test.gz无保证书者明示或暗示。
发布于 2018-08-30 00:35:14
如果您真的需要在PowerShell中使用旧的DOS管道系统,可以通过在单独的临时DOS会话中运行命令来完成:
& cmd /c "dir c:\windows | gzip > test.gz"/c开关告诉cmd运行命令,然后退出。当然,这只有当所有的命令都是老式的DOS -你不能混合-n-匹配他们与PowerShell命令。
虽然问题中给出的例子有一些PowerShell替代方案,但是有许多DOS程序使用旧的管道系统,在PowerShell中不能工作。svnadmin load是我有幸与之打交道的一种。
https://stackoverflow.com/questions/5317269
复制相似问题