2014-09-08 15 views
6

Próbuję wyświetlić monit o akcję użytkownika i jeśli nie zostanie podjęte żadne działanie, podpiszę i skrypt będzie kontynuował. tutaj jest mój wiersz polecenia configuraiton dialogowePowershell - monituj użytkownika, a następnie wygasa monit po xx sekundach


$yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes","" 
$no = New-Object System.Management.Automation.Host.ChoiceDescription "&No","" 
$cancel = New-Object System.Management.Automation.Host.ChoiceDescription "&Cancel","" 
$choices = [System.Management.Automation.Host.ChoiceDescription[]]($yes,$no,$cancel) 
$caption = "Caption message here" 
$dialogmessage = ("Do you want to do something?:`n") 

$timer = #set some value 
#While the value is grater than zero keep the prompt open 

while($timer -gt 0) 
{ 
    $result = $Host.UI.PromptForChoice($caption,$dialogmessage,$choices,0) 

    if($result -eq 0){Write-Host "Yes was selected"} 

    if($result -eq 1){Write-Host "No was selected"} 

    if($result -eq 2){Write-Host "Canceled by user.";exit} 
} 

Mam spojrzał w górę iw dół w internecie Widziałem to zaimplementowane w C#, ale dla życia mnie nie mogę określić najlepsze podejście do PowerShell. Byłbym wdzięczny za każdą pomoc.

Dziękuję

Edycja: Dziękuję Noego, tutaj jest zaktualizowany kod, to jest jeszcze bardziej kompaktowy też!

  $prompt = new-object -comobject wscript.shell 
      $answer = $prompt.popup(("Do you want to do something?`n",5,"title",3)    
      if($answer -eq 6) {Write-Host "Yes was selected"} 
      if($answer -eq 7) {Write-Host "No was selected"} 
      if($answer -eq -1) {Write-Host "Timed out} 
      if($answer -eq 2) {Write-Host "Canceled by user.";exit}  

Odpowiedz

6

Proszę bardzo ... wykopali to z jednego z moich starych skryptów

#Value Description 
#0 Show OK button. 
#1 Show OK and Cancel buttons. 
#2 Show Abort, Retry, and Ignore buttons. 
#3 Show Yes, No, and Cancel buttons. 
#4 Show Yes and No buttons. 
#5 Show Retry and Cancel buttons. 
#http://msdn.microsoft.com/en-us/library/x83z1d9f(v=vs.84).aspx 

$a = new-object -comobject wscript.shell 
$intAnswer = $a.popup("Question?",2,"Title",4) #first number is timeout, second is display. 

#7 = no , 6 = yes, -1 = timeout 
+0

Wow nigdy jednak używać ComObject Wscript.Shell. Dziękuję, Noah! –

+0

Nie ma za co, cieszę się, że mogłem pomóc –

Powiązane problemy