2017-12-20 14 views
0

これは、最新の形式のスクリプトです。コード6行目で、ホスト上の仮想の現在の状態を表示しようとしています。 コードを実行すると、最後まで表示されません。powershell cmdlet正しい時刻にGet-Vmが表示されない

これは他の場所でも正しく動作し、私が望むような行動を起こします。しかし、Get-VMは、スクリプトが終了する直前まで実行されません。

私にはわからないコマンドを実行する強制コマンドがありますか?私はそれがおそらくちょうど私が見ていない愚かな間違いであることを知っています。

さらに詳しい説明が必要な場合は、私にお知らせください。

#new-alias -Name rh -Value read-host 
Get-VM 
$AA = rh "Would you like to preform an action?[y/n]" 
While($AA -eq "y"){ 
$A = rh "What would you like to do? `n save?[sa] `n start?[st] `n stop?[x] 
`n restart?[re]`n " 

# blank-vm -name blank 
If($A -eq "sa"){ 
$s = "Save" 
$B = rh "Which VM would you like to $s ?[a for all]" 
if($B -eq "a"){ 
Get-VM | Save-VM 
} 
else{save-vm -name "$B"} 
} 
If($A -eq "st"){ 
$s = "Start" 
$B = rh "Which VM would you like to $s ?[a for all]" 
if($B -eq "a"){ 
Get-VM | Start-VM 
} 
else{Start-vm -name "$B"} 
} 
If($A -eq "x"){ 
$s = "Stop" 
$B = rh "Which VM would you like to $s ?[a for all]" 
if($B -eq "a"){ 
Get-VM | stop-VM 
} 
else{Stop-vm -name "$B"} 
} 
If($A -eq "re"){ 
$s = "Restart" 
$B = rh "Which VM would you like to $s ?[a for all]" 
if($B -eq "a"){ 
Get-VM | restart-VM 
} 
else{restart-vm -name "$B"} 
} 
$AA = rh "Would you like to preform another action?[y/n]" 
} 
+0

を持っている可能性が...あなたは、ハードスクリプトにサーバ名をコード化しましたScripting Guysはハードコーディングされたサーバー以外のサーバーに対処できないため、Get-VMはリストを提供しています。個人的には、このスクリプトは、基本ユーザのためのGUIや上級ユーザ向けの適切なpowershellコマンドからすべてを行うことができるのでかなり無意味だと思われますが、あなたが主張するのであれば、適切に一般化してハードコードされた値を削除するか、サーバーの最初から。 – Ashigore

+0

私は現在の状態メニューとしてGet-VMを表示することを意図していました。一目で、現在実行されているVMMを教えてください。私はそれをより一般的にするだろうが、私はどのようにするか分からない。このスクリプトの現在のバージョンは、仮想マシンのフルネームを入力する必要がないため、ハードコードされたVM名で記述されています。 (Get-VMは表示されないため)。私は少し一般的なコードを持っています。私はそのポストを更新します。ご協力ありがとうございました。 – Kieran

答えて

0

これは、Hyper-VコマンドレットとRead/Write-Hostコマンドレットの問題です。 g。

Get-VM 
Write-Host "Test" 

結果がホストに最初に書き込まれ、Get-VMの結果が出力されます。 Get-VMHost、Get-VMHardDiskおよびGet-VMSwitchにも同じ問題があります。 Get-ServiceやGet-Processなどの「標準」コマンドレットは正常に動作しています。 g。

Get-Service 
Write-Host "Test" 

は、最初にサービスのリストを出力し、次に文字列Testを出力します。 Write-Hostの代わりにWrite-Outputを使用すると、通常の動作にもなります。

これを回避するには、Get-VMの出力を文字列に変換できます。使用中のポイントをいただきましたので、G:

Get-VM | Out-String 
Write-Host "Test" 

その他のコマンドレットは、これで開始する場所を私も知っていないと同じ問題

+0

ありがとうございました!それは問題を解決しました。だから、私のスクリプトではなく、Hyper-V Cmdletの問題でした....面白いです。共有していただきありがとうございます! – Kieran

関連する問題