Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PowerShell运行另一个命令行应用程序_Powershell_Powershell 2.0 - Fatal编程技术网

从PowerShell运行另一个命令行应用程序

从PowerShell运行另一个命令行应用程序,powershell,powershell-2.0,Powershell,Powershell 2.0,我想这已经被问了很多次了,但我找不到一个适合我的答案 我需要从变量构造一个命令行 我需要运行那个命令行可执行文件 我需要将结果显示在与脚本相同的屏幕上 我正在尝试使用自定义源和目标运行Putty SCP 我把&和调用表达式弄得一团糟,但这是不可能的。PowerShell中的一些简单的#1用例非常困难,它们吞噬了它的所有优点 我能看到的唯一方法是在一个新的流程实例中运行它,设置所有的输出重定向,然后在完成后通过管道将其返回PS屏幕 我知道这可能会失败,因为输出缓冲区可能会满,除非您连接到事件并

我想这已经被问了很多次了,但我找不到一个适合我的答案

  • 我需要从变量构造一个命令行
  • 我需要运行那个命令行可执行文件
  • 我需要将结果显示在与脚本相同的屏幕上
我正在尝试使用自定义源和目标运行Putty SCP

我把
&
调用表达式
弄得一团糟,但这是不可能的。PowerShell中的一些简单的#1用例非常困难,它们吞噬了它的所有优点

我能看到的唯一方法是在一个新的流程实例中运行它,设置所有的输出重定向,然后在完成后通过管道将其返回PS屏幕

我知道这可能会失败,因为输出缓冲区可能会满,除非您连接到事件并将其取出

另一种方法是将命令行写入批处理文件并运行该批处理文件

谢谢你的帮助。必须有一个更简单的方法

编辑

例如:

[string]$scpPath = Find-PathToPuttyScpExecutable;
[string]$scpArguments = "-v -r -pw " + $MarkLogicServerPassword + " " + $MarkLogicSourcePath + " " + $MarkLogicServerUserName + "@" + $ServerName + ":" + $MarkLogicDestinationRootPath

我需要执行
$scpPath+“”+$scpArguments

不要如此依赖字符串。只需使用参数运行命令:

[string]$scpPath = Find-PathToPuttyScpExecutable;
&$scpPath -v -r -pw $MarkLogicServerPassword $MarkLogicSourcePath "$($MarkLogicServerUserName)@$($ServerName):$($MarkLogicDestinationRootPath)"
PowerShell将为您处理报价。在大多数情况下,它工作得很好,我怀疑你会在边缘案例中绊倒

如果必须动态创建参数列表,则应使用数组并传递:

$scpArguments = '-v',
                '-r',
                '-pw',
                $MarkLogicServerPassword,
                $MarkLogicSourcePath,
                "$($MarkLogicServerUserName)@$($ServerName):$($MarkLogicDestinationRootPath)"

&$scpPath @scpArguments

别那么依附于绳子。只需使用参数运行命令:

[string]$scpPath = Find-PathToPuttyScpExecutable;
&$scpPath -v -r -pw $MarkLogicServerPassword $MarkLogicSourcePath "$($MarkLogicServerUserName)@$($ServerName):$($MarkLogicDestinationRootPath)"
PowerShell将为您处理报价。在大多数情况下,它工作得很好,我怀疑你会在边缘案例中绊倒

如果必须动态创建参数列表,则应使用数组并传递:

$scpArguments = '-v',
                '-r',
                '-pw',
                $MarkLogicServerPassword,
                $MarkLogicSourcePath,
                "$($MarkLogicServerUserName)@$($ServerName):$($MarkLogicDestinationRootPath)"

&$scpPath @scpArguments

第三种方法是用C#编写CmdLet,但尽管我过去已经这样做了,但我希望避免加载模块。“我已经搞乱了&调用了表达式,但这是不可能的”——我很确定它不是。发布你的代码并指出什么不起作用,有人可以尝试帮助你。否则,这听起来像是一个rant.post的exe名称,它的参数,您需要和什么变量,您正在插入,并提到他们在哪里goHmm/Grr。我试图发布一个屏幕转储,但是剪贴工具生成的.png不被SO理解!无论如何,代码的截图都很糟糕。无法复制/粘贴,无法搜索。第三种方法是用C#编写CmdLet,但尽管我过去已经这样做了,但我希望避免加载模块。“我已经搞乱了&调用了表达式,但这是不可能的”-我很确定不是。发布你的代码并指出什么不起作用,有人可以尝试帮助你。否则,这听起来像是一个rant.post的exe名称,它的参数,您需要和什么变量,您正在插入,并提到他们在哪里goHmm/Grr。我试图发布一个屏幕转储,但是剪贴工具生成的.png不被SO理解!无论如何,代码的截图都很糟糕。无法复制/粘贴,无法搜索。我没想到会出现这种情况。必须调整思维模式。谢谢Joey。Powershell需要一个字符串参数数组或它们之间的空格,以便能够标记它们。一个带有空格的字符串将被解释为一个标记。我没有看到这一点。必须调整思维模式。谢谢Joey。Powershell需要一个字符串参数数组或它们之间的空格,以便能够标记它们。带有空格的单个字符串将被解释为单个标记。