如果Hyper-v VM已达到登录屏幕,如何识别Powershell

时间:2014-08-17 21:06:35

标签: powershell centos boot hyper-v

我创建了一个在Hyper-V下运行的CentOS 7最小虚拟机。为此,我安装了Transmission并将其设置为使用 systemctl enable transmission-daemon.service

启动服务。

我想编写一个PowerShell脚本来启动服务器,等到它处于活动状态,然后打开一个url来查看Transmission web界面。

我使用了 Get-VMIntegrationService ,但是在启动过程中,这会为心跳返回一个OK值。因此,我不得不求助于开始 - 睡眠再等15秒,以便当我的脚本打开浏览器时,它不会超时。

有没有办法建立登录界面?或者更优雅的方式呢?

这是我目前的启动PowerShell脚本:

$vmToStart="CentOS_7_minimal"
$url="http://"+$vmToStart+":9091/"  

if ((Get-VMIntegrationService $vmToStart | ?{$_.name -eq "Heartbeat"}).PrimaryStatusDescription -ne "OK") 
{
    Write-Host "Starting Transmission server..." -foregroundcolor "blue"
    start-vm $vmToStart
    do {Start-Sleep -milliseconds 100} 
        until ((Get-VMIntegrationService $vmToStart | ?{$_.name -eq "Heartbeat"}).PrimaryStatusDescription -eq "OK")

    Write-Host "Transmission server started." -foregroundcolor "yellow"
    Write-Host "Starting Transmission service..." -foregroundcolor "blue"
    Start-Sleep -seconds 15
}
Start-Process $url

1 个答案:

答案 0 :(得分:0)

优雅不是,但您只需通过轮询就可以检查您需要的网站是否可用。 .NET Webclient非常简单易用。请参阅下面的示例。

$webClient = New-Object System.Net.WebClient
$url = "http://www.stackoverflow.com"

Do {
     Start-Sleep -Seconds 1

     try { $content = $webClient.DownloadString($url) }
     catch { Write-Host "Page not yet retrieved . . ."}
} While ( $content -eq $null)