我认为这已被多次询问但我找不到适合我的答案。
我正在尝试使用自定义源和目的地运行Putty SCP。
我与&
和Invoke-Expression
混淆了,但这是不可能的。 PowerShell中的一些简单的#1用例事物是如此令人难以置信的困难,他们吃掉了所有关于它的好东西。
我能看到这样做的唯一方法是在新的Process实例中运行它并设置所有输出重定向,然后在完成后在PS屏幕上将其管道输出。
而且我知道这可能会失败,因为输出缓冲区可能会变满,除非你已经挂钩事件并将其挖出来。
另一种方法是将我的命令行写入批处理文件并运行它。
任何帮助表示赞赏。必须有一个更简单的方法。
修改
例如:
[string]$scpPath = Find-PathToPuttyScpExecutable;
[string]$scpArguments = "-v -r -pw " + $MarkLogicServerPassword + " " + $MarkLogicSourcePath + " " + $MarkLogicServerUserName + "@" + $ServerName + ":" + $MarkLogicDestinationRootPath
我需要执行$scpPath + " " + $scpArguments
。
答案 0 :(得分:4)
不要如此依附于字符串。只需运行带参数的命令:
[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