2017-07-03 65 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

哎呦,這是真的。我忘記了 - 等標誌。感謝您指出。是的,在我使用了 - 等國旗之後,根本沒有必要使用睡眠。 –