Joe*_*ang 5 msbuild powershell cmdlet
全部,我正在尝试在MSBuild中执行外部电源Shell脚本文件。但是每次PS运行cmdlet时Read-Host。MSBuild似乎停止了。并且不提示我输入。我不知道会发生什么。似乎控制台处于死锁状态。
testloop.ps1代码如下所示。
$ErrorActionPreference = 'Stop'
$error.clear()
function GetAzureSubScription()
{
read-host "please input something :"
}
write-host "Get into script"
GetAzureSubScription
Run Code Online (Sandbox Code Playgroud)
下面是MSBuild代码(为清楚起见已包装):
<Exec WorkingDirectory="$(MSBuildProjectDirectory)"
Command="$(windir)\system32\WindowsPowerShell\v1.0\powershell.exe -f
E:\Work\AutoDeploy\testloop.ps1" />
Run Code Online (Sandbox Code Playgroud)
所以是的,控制台(只是一个小问题 - powershell.exe 不在 cmd.exe 下运行 - 它们是单独的进程,但它们都使用控制台窗口)窗口是隐藏的,因此在提示输入时它会显得冻结。这里最简单的选择是使用将使用图形窗口提示的版本覆盖读取主机功能。添加脚本的开头,添加以下函数:
# override the built in prompting, just for this script
function read-host($prompt) {
$x = 0; $y = 0;
add-type -assemblyname microsoft.visualbasic
[Microsoft.VisualBasic.Interaction]::InputBox($prompt,
"Interactive", "(default value)", $x, $y)
}
Run Code Online (Sandbox Code Playgroud)
现在您的脚本将能够提示输入值。另外,您应该powershell.exe使用参数运行-noninteractive以捕获意外调用交互式主机函数的任何其他位置。但它不会阻止上述功能的工作。
| 归档时间: |
|
| 查看次数: |
1945 次 |
| 最近记录: |