2017-12-20 7 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

을 가질 수 ... 당신은 하드 스크립트로 서버 이름을 구분 한 스크립팅은 하드 코드 된 서버가 아닌 다른 서버를 처리 할 수 ​​없으므로 Get-VM에서 목록을 제공합니다. 개인적으로이 스크립트는 기본 사용자를위한 GUI 또는 고급 사용자를위한 적절한 powershell 명령을 통해 모든 것을 수행 할 수 있기 때문에 무의미한 것처럼 보입니다. 그러나 사용자가 주장하는 경우 적절하게 일반화하고 하드 코딩 된 값을 제거하거나 목록을 하드 코딩하십시오 서버 시작부터. – Ashigore

+0

Get-VM을 현재 상태 메뉴로 표시하려고했습니다. 언뜻보기에 현재 어떤 vms가 실행되고 있는지 알려줍니다. 나는 그것을 더 일반적으로 만들 것이지만 나는 어떻게 해야할지 모른다. 이 스크립트의 현재 버전은 가상 컴퓨터의 전체 이름을 입력하지 않으므로 하드 코딩 된 VM 이름으로 작성됩니다. (Get-VM이 표시되지 않기 때문에) 약간 더 일반적인 코드가 있고 그 코드로 내 게시물을 업데이트합니다. 도와 줘서 고마워. – Kieran

답변

0

이 문제는 Hyper-V cmdlet 및 Read/Write-Host cmdlet, 지.

Get-VM 
Write-Host "Test" 

그러면 테스트 문자열이 호스트에 먼저 쓰여지고 Get-VM 결과가 출력됩니다. Get-VMHost, Get-VMHardDisk 및 Get-VMSwitch에도 동일한 문제가 있습니다. Get-Service 및 Get-Process와 같은 "표준"cmdlet은 정상적으로 작동합니다. 지.

Get-Service 
Write-Host "Test" 

먼저 서비스 목록을 출력 한 다음 Test 문자열을 출력합니다. Write-Host 대신 Write-Output을 사용하면 정상적으로 작동합니다.

이렇게하려면 Get-VM 출력을 문자열로 변환 할 수 있습니다 (예 : e-mail). 사용의 점 뭐죠 있도록 g :

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

다른 cmdlet을이 시작하는 곳에 내가 알지도 못하는 동일한 문제

+0

고마워요! 문제가 해결되었습니다. 그래서 Hyper-V Cmdlet에 문제가 생겼지 만 내 스크립트가 아니라 .... 흥미 롭습니다. 공유해 주셔서 감사합니다. – Kieran