"Null reference exception"? no, grazie, prendo un "unexpected T_VARIABLE"... Questo è il forum per imparare l'arte della programmazione o per chiedere un parere su una sessione di debug particolarmente ostica.
Regole del forum Ricorda di indicare chiaramente nell'oggetto il linguaggio ([C#] oppure [PHP], [Java], [HTML], ...), se la discussione ne riguarda uno in particolare!
Cerco di spiegare la cosa nella maniera più chiara possibile.
Ho uno script batch che serve per installare da remoto dei package MSI. All'interno del batch ho definito una variabile che corrisponde al nome del computer in modo da poter lanciare da riga di comando qualcosa simile a:
dove flash.cmd è il batch che contiene la variabile, mentre computer1 è il nome del pc remoto in cui installare il programma.
La mia esigenza pratica è quella di avere uno script vbs che evochi una textbox dove inserire il nome computer (la variabile) e che, senza dover accedere per forza alla riga di comando, si prenda carico di passare il dato quando lancia il batch
copio i file via robocopy sul pc locale, poi se mi serve li copio all'interno di determinate cartelle, avvio l'eseguibile che devo installare, aggiungo chiavi di registro.
LIstapc.txt contiene tutti i nomi dei pc su cui installare, l'usavo anche per le operazioni di robocopy e di del, ma poi l'avevo abbandonata (ma non ricordo perché di preciso).
“Se tutti i documenti raccontavano la stessa favola, ecco che la menzogna diventava un fatto storico, quindi vera.”
Sono amministratore di una OU della gerarchia AD e la parte delle credenziali per fortuna posso ometterla.
Nel mio caso ho la necessità di installare su singoli pc e mi servirebbe per l'appunto una interfaccia grafica per risparmiare l'uso della riga di comando ai miei collaboratori (non mi va di perdere tempo a spiegare loro come fare).
Per il deploy massivo uso anche io una lista che rende superflua la necessità di immettere il nome del client.
Forse non ho capito bene cosa intendi fare: non ti basta utilizzare la variabile d'ambiente %COMPUTERNAME% (riporta il nome del computer dal quale viene richiamata)?
Purtroppo no, non mi serve il nome computer locale (è quello che estrae quella variabile) ma devo indicare al batch su quale computer remoto eseguire il comando.
Domani con più calma (e una vera tastiera) spiego meglio la cosa
net use s: \\%1\c$
s:
md s:\setup
del s:\setup\. /s /q
copy c:\setup\7zip\7z920.msi s:\setup
wmic /node:"%1" product call install true,"", "c:\setup\7z920.msi"
c:
net use s: /delete
come puoi notare, c'è una variabile (%1) che serve per passare il nome computer alle istruzioni di mappatura, copia ed installazione presenti nel batch
- il comando net use mappa c$ del computer remoto e lo abbina alla lettera di unità locale S:
- md crea la cartella setup nel computer remoto in caso ancora non esista
- del elimina eventuali file e cartelle per preparare un ambiente di installazione pulito
- copy copia l'installer nella macchina target
- wmic esegue l'installazione
- il successivo net use elimina l'unità logica
attualmente per installare 7z su un computer remoto devo aprire la console, entrare nella cartella setup e digitare:
7z nome_computer_remoto
non è una gran fatica e funziona perfettamente ma volevo velocizzare ulteriormente la cosa creando un file VBS che con un semplice doppioclic apra una textbox in cui immettere il nome computer e che passi quella stringa al file batch o a eventuale istruzione similare via VBscript.
Sarebbe ancora più rapido ed immediato.
Il seguente script VBS dovrebbe fare ciò che chiedi (esegue il file batch specificando come parametro d'avvio il nome del computer immesso nella casella di testo):
Dim nomecomp
nomecomp = InputBox("Inserire il nome del computer","VBS InputBox")
Set objShell = WScript.CreateObject("WScript.Shell")
objShell.Run "test.bat " & nomecomp
Per renderlo funzionante devi modificare la stringa test.bat con il nome dello script batch da richiamare.
N.B.:Il file VBS deve trovarsi nello stesso percorso del file batch.
Se hai modo di provarlo, sarei lieto di sapere se funziona correttamente.
Inserendo un messaggio, dichiari di aver letto e accettato il regolamento di partecipazione.
Nello specifico, sei consapevole che ti stai assumendo personalmente la totale responsabilità delle tue affermazioni, anche in sede civile e/o penale,
manlevando i gestori di questo sito da ogni coinvolgimento e/o pretesa di rivalsa.
Dichiari inoltre di essere consapevole che il messaggio sarà visibile pubblicamente, accetti di diffonderlo con licenza
CC BY-NC-SA 3.0 (con attribuzione a "TurboLab.it") e rinunci ad ogni forma di compensazione (economica o altro).
Rinunci inoltre esplicitamente a qualsiasi pretesa di cancellazione del messaggio.