[英]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.