[英]Is there a Powershell command to Restart the machine and run a script without any user inputs?
[英]Manage inputs from external command in a powershell script
首先,我想道歉,如果标题不够描述,我很难处理这个问题。 我正在尝试使用将为另一个进程执行的powershell脚本为svn合并构建自动化。 我正在使用的功能如下所示:
function($target){
svn merge $target
}
现在,当合并中存在冲突时,我的问题就出现了。 该命令的默认行为是请求来自用户的输入并相应地继续。 我想使用预定义的值自动化这个过程(显示差异,然后推迟合并),但我还没有找到办法。 总之,我希望完成的工作流程如下:
有什么方法可以在powershell中做到这一点? 非常感谢您提供给我的任何帮助/线索。
编辑:
澄清我的问题:我想在powershell脚本中执行的命令需要时自动提供一个值,如下例所示:
编辑2:
这是使用@ mklement0提供的代码段进行的测试。 不幸的是,它没有按预期工作,但我认为添加此版本是为了澄清每个完整的问题
您可以将SVN命令行输出存储到变量中,并根据需要对其进行解析和分支。 每行输出都存储到一个新的枚举器中(存储在PS变量中的cli输出是数组格式)
$var = & svn merge $target
$var
注意 :
这个答案并没有解决OP的问题,因为当进程的stdin输入不是来自终端 (控制台)时,特定的目标实用程序svn
显然会抑制提示 。
但是,对于仍然提示的实用程序,下面的解决方案应该在规定的约束条件下工作。
通常,在尝试模拟用户输入之前,值得研究目标实用程序是否通过其命令行选项提供对行为的编程控制,这种选项既简单又强大。
虽然检测给定的外部命令是否提示输入用户输入是微不足道的:
让我们假设下面的批处理文件foo.cmd
,它提出2个提示并回显输入:
@echo off
echo begin
set /p "input1=prompt 1: "
echo [%input1%]
set /p "input2=prompt 2: "
echo [%input2%]
echo end
现在让我们将响应one
和two
发送到该批处理文件:
C: PS> Set-Content tmp.txt -Value 'one', 'two'; ./foo.cmd '<' tmp.txt; Remove-Item tmp.txt
begin
prompt 1: one
[one]
prompt 2: two
[two]
end
注意:
由于我不知道的原因,这种方法在Windows上工作需要使用中间文件 - 'one', 'two' | ./foo.cmd
'one', 'two' | ./foo.cmd
不起作用 。
<
必须表示为'<'
以确保它是如何传递给cmd.exe
而不是由PowerShell预先解释(其中<
不支持)。 相比之下, 'one', 'two' | ./foo
'one', 'two' | ./foo
并在Unix平台上(PowerShell核心)工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.