Sto provando disperatamente a passare i parametri da un file batch a uno script PowerShell che controlla se i servizi di Windows sono in esecuzione o meno.Passaggio dei parametri a PowerShell dal file bat
Qui è il mio comando pienamente operativa:
.\nsrservices.ps1 -cmd running nsrexecd,stisvc
Ma il problema è il comportamento del comando:
- In una finestra di PowerShell, i nomi dei servizi sono visti come due (o più) , verificando quindi 'nsrexecd', quindi cercando 'stisvc'
- Nel file batch, i nomi dei servizi vengono passati a PowerShell come valore univoco, verificando quindi 'nsrexecd, stisvc'
Ecco il mio file bat:
powershell.exe -File .\nsrservices.ps1 -cmd running nsrexecd,stisvc
ECHO.%ERRORLEVEL%
exit /B %ERRORLEVEL%
Nel mio file PS, i parametri vengono definiti così:
param([string]$cmd=$(throw "Type d'action manquante !"),[string[]]$srv)
In un file di log, ho questi due risultati (spiacente per la produzione francese).
Dalla finestra PowerShell:
24/12/2015 09:02:50-Paramètres appelés : cmd=running srv=stisvc nsrexecd
24/12/2015 09:02:50-Début test de l'état running du service : stisvc
24/12/2015 09:02:50- Début évaluation de l'état du service : stisvc
24/12/2015 09:02:50- Fin évaluation de l'état du service : stisvc
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : stisvc
24/12/2015 09:02:50-Début test de l'état running du service : nsrexecd
24/12/2015 09:02:50- Début évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50- Fin évaluation de l'état du service : nsrexecd
24/12/2015 09:02:50-Le service tourne
24/12/2015 09:02:50-Fin test de l'état running du service : nsrexecd
Il che significa che i servizi sono testati in sequenza
Dal file bat:
24/12/2015 09:04:24-Paramètres appelés : cmd=running srv=nsrexecd,stisvc
24/12/2015 09:04:24-Début test de l'état running du service : nsrexecd,stisvc
24/12/2015 09:04:24- Début évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24- Le service nsrexecd,stisvc n'existe pas !
24/12/2015 09:04:24- Fin évaluation de l'état du service : nsrexecd,stisvc
24/12/2015 09:04:24-Fin test de l'état running du service : nsrexecd,stisvc
Il che significa che il servizio denominato 'nsrexecd, stisvc ' non esiste.
La virgola tra le mie due nomi sembra creare confusione quando si utilizza un file .bat
così sto tirando i miei ultimi peli di trovare una soluzione per vincere contro questo file .bat sanguinosa.
Ho provato a virgolette, virgolette singole, -File, -Command, ma senza successo.
Qualsiasi suggerimento o soluzione sarebbe molto apprezzato poiché la mia ricerca su questo forum non mi ha dato qualcosa di utile.
E ovviamente, dopo vorrei chiamare il file .bat con i parametri.
Una cosa che si potrebbe fare non è usare le virgole nella chiamata batch e cambiare il param per $ srv in 'ValueFromRemainingArguments = $ true'. Puoi vedere di più qui https://technet.microsoft.com/en-us/library/hh847743.aspx. Oppure basta inserirlo come una singola stringa e usare '-split", "' – Matt
Perché chiamare uno script PowerShell da un file batch? Basta eseguirlo direttamente da PowerShell. –
@Bill_Stewart: la mia domanda riguardava l'inclusione di PowerShell in un file .bat perché devo. Questo script è lanciato da un programma in esecuzione che non accetta altro da file .bat e .cmd ... –