10/06/2010 15.03
Buon giorno a tutti,
Da qualche ora ho iniziato ad utilizzare powershell per creami degli script che mi servono.
Sono a buon punto anche perchè il tutorial su questo sito è perfettamente in tema con quello che dovrei fare.
Ora sono fermo perchè non riesco a trovare il modo di ricevere un input da tastiera e inserirlo in una variabile.
In pratica ho bisogno di stampare a video:
"Chiudere questo processo? Y/N"
e ricevere in una variabile i caratteri Y o N e a seconda dei casi procedere con delle operazioni.
Grazie a tutti.
10/06/2010 16.58
Prova a dare un occhio qui:
http://scriptolog.blogspot.com/2007/09/make-choice.html
Ciao!
10/06/2010 17.11
Ciao ragazzi,
probabilmente è sufficiente utilizzare il cmdlet Read-Host e memorizzare l'output in una variabile, senza scomodare i metodi esposti dall'host.
Es:
$choice = (Read-Host 'Chiudere questo processo? Y/N')
if ($choice -eq 'Y') {
# Stop-Process notepad
}
Ciao, a presto!
Efran Cobisi
Solution developer, consultant and trainer
Microsoft MVP, MCT, MCSD for Microsoft .NET, MCTS: SQL Server 2005
10/06/2010 17.31
si io ho fatto così
$var=read-host "Chiudere ? Y/N" if ($var -eq 'Y') { stop-process ... }
il problema che tutto quello che c'è dopo Y/N" me lo considera ancora una stringa da visualizzare. Non riesco a dirgli che dopo Y/N" continua il codice.
Ho provato anche con le parentesi ma mi da errore.
10/06/2010 17.38
Puoi postare il codice con le parentesi che hai usato, per piacere? Se usi la formattazione "powershell" (pulsante con l'icona di PowerShell, nella toolbar dell'editor) va ancora meglio. ;)
Ciao
Efran Cobisi
Solution developer, consultant and trainer
Microsoft MVP, MCT, MCSD for Microsoft .NET, MCTS: SQL Server 2005
10/06/2010 17.48
Guarda, si tratta solo di andare a capo prima del blocco if più interno. Poi funziona come desideri!
Ad ogni modo, visto che l'hai chiesto ti posto una versione più compatta del tuo script, che impiega unicamente la pipeline della shell (ma che comunque è funzionalmente equivalente al tuo):
Get-Process outlook |
Where-Object { (Read-Host "Chiudere $_? Y/N") -eq 'y' } |
Stop-Process
Ciao, a presto!
Efran Cobisi
Solution developer, consultant and trainer
Microsoft MVP, MCT, MCSD for Microsoft .NET, MCTS: SQL Server 2005
11/06/2010 8.56
Grazie.. allora proverò mandando a capo il codice.
Per quello che hai inserito te nn credo che lo posso usare perchè, ho bisogno di scorrere tutti i processi e, quando ne trova uno di un certo tipo, chiede se bisogna chiuderlo e non è detto che ce ne sia solo uno di processo attivo, per quello ho dovuto usare un ciclo.
Grazie lo stesso.
11/06/2010 9.54
Ok perfetto... funziona tutto alla perfezione.
Ora ho un'altra domanda.. probabilmente stupida ma nn riesco a trovare una soluzione.
Devo inserire questa shell in un eseguibile da poter lanciare quando si vuole.
Ho provato a fare il classico .bat da un file txt ma nn funziona... come posso fare?
11/06/2010 13.49
Ciao!
L'elaborazione tramite pipeline è assimilabile a quella di un ciclo, dove viene processato di volta in volta ciascun elemento.
Quindi puoi tranquillamente sostituire il tuo blocco condizionale con il cmdlet Where-Object e continuare a sfruttare la potenza e la compattezza della pipeline. ;)
Cosa intendi con "Devo inserire questa shell in un eseguibile da poter lanciare quando si vuole"?
Se vuoi lanciare uno script di PowerShell puoi usare l'eseguibile powershell.exe.
Ciao, a presto.
Efran Cobisi
Solution developer, consultant and trainer
Microsoft MVP, MCT, MCSD for Microsoft .NET, MCTS: SQL Server 2005