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