gpt4 book ai didi

powershell - Powershell 中奇怪的命令行行为

转载 作者:行者123 更新时间:2023-12-02 03:56:42 26 4
gpt4 key购买 nike

考虑以下 powershell 脚本:

Write-Host "Foo"

if($true)
{
Write-Host "Bar"
throw ("the matrix has a bug")
}

文件保存到 c:\test.ps1

这是调用,在 cmd 窗口中显示结果:

C:\>powershell.exe -NonInteractive -Command - <c:\test.ps1
Foo

C:\>

但是,如果我在 } 之后添加 2 个换行符结果如预期:

Write-Host "Foo"

if($true)
{
Write-Host "Bar"
throw ("the matrix has a bug")
}
<linebreak here>
<linebreak here>

相同的调用,这是结果:

C:\>powershell.exe -NonInteractive -Command - <c:\test.ps1
Foo
Bar
the matrix has a bug
At line:4 char:7
+ throw <<<< ("the matrix has a bug")
+ CategoryInfo : OperationStopped: (the matrix has a bug:String)
[], RuntimeException
+ FullyQualifiedErrorId : the matrix has a bug


C:\>

正如预期的那样

出现了 <在命令行中,每行写入一行到 powershell 的控制台。所以想,好吧,可能是 CMD 没有读取所有行,但我写了一个小的 C# 应用程序读取控制台并打印它,它读取这些行就很好。

这是 C# 代码:

using System;

namespace PrintArgs
{
internal class Program
{
private static void Main(string[] args)
{
foreach (string arg in args)
{
Console.WriteLine("----- ARG start");
Console.WriteLine(arg);
Console.WriteLine("----- ARG stop");
}


string line;
do
{
line = Console.ReadLine();
if (line != null)
{
Console.WriteLine(line);
}
}
while (line != null);
}
}
}

调用它(所以基本上将 PrintArgs.exe 放在我的 C 驱动器上,并使用相同的命令调用它,使用带有 NO 换行符的 test.ps1)产生这个:

C:\>printargs.exe -NonInteractive -Command - <c:\test.ps1
----- ARG start
-NonInteractive
----- ARG stop
----- ARG start
-Command
----- ARG stop
----- ARG start
-
----- ARG stop
Write-Host "Foo"

if($true)
{
Write-Host "Bar"
throw ("the matrix has a bug")
}

C:\>

有人可以帮我解决这个问题吗? (很抱歉发了这么长的帖子)。

最佳答案

如果您省略“<”I/O 重定向,它会起作用。

C:\>powershell.exe -NonInteractive c:\test.ps1

关于powershell - Powershell 中奇怪的命令行行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12296536/

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