2017-07-03 33 views
1

我在powershell中编写了一个小实用程序函数来获取JavaVersion。Powershell不会保持变量引用,直到我设置断点

function GetJavaVersion(){ 
    start-process java -ArgumentList "-version" -NoNewWindow -RedirectStandardError .\javaver.txt 
    $javaver = Get-Content .\javaver.txt 
    #just wait here for file to get released. 
    Start-Sleep -s 5 
    Remove-Item .\javaver.txt -Force 
    return $javaver; 
} 

如果我运行此代码如下;

GetJavaVersion 

它只是不会在控制台上打印任何东西。

但是,如果我在$javaver = Get-Content .\javaver.txt行设置了中断点,并且一步一步地按预期打印内容。

我的PS版本5.1.14393.1358。

我在这里失踪了什么?

回答

1

Start-Process不是同步的,所以可能发生的情况是java进程在数毫秒后读取文件时没有完成或写入任何内容。

通过设置断点,您可以在读取文件之前给java进程时间完成。

使用-Wait参数Start-Process,以便它等待java退出。

如果你在阅读之前就已经睡过了,它可能会起作用,但它并不是真正做到这一点的正确方法。

在删除它之前,您也应该不需要任何类型的睡眠。 Get-Content不会打开文件。

+1

哎呦,这是真的。我忘记了 - 等标志。感谢您指出。是的,在我使用了 - 等国旗之后,根本没有必要使用睡眠。 –