2015-09-03 9 views
11

Si sta tentando di scrivere uno script PowerShell che richiama un'applicazione esterna, un client Redis (redis-cli.exe), quindi invia più comandi a tale file .exe. Non abbiamo alcun problema inviando singoli comandi come di seguito:Invio di comandi multipli a un programma esterno

& redis-cli -h localhost -p 6379 SMEMBERS someKey 

Il problema è che questo avrà inizio un client Redis, dare un unico comando, chiudere il client e quindi restituire il controllo PowerShell. Dobbiamo inviare più comandi in una transazione. Ad esempio, qui ci sono i comandi che vogliamo inviare al client:

MULTI 
DEL someKey 
DEL someSet 
EXEC 

Il cliente Redis non supporta l'invio di una stringa di script LUA come un comando, ma questo purtroppo non supporta i comandi/exec MULTI transazionali . In altre parole, dobbiamo essere in grado di emettere comandi multipli come quelli elencati sopra.

+1

Non so su PowerShell, ma sulla mia macchina (Linux) Redis-cli prende più comandi sullo standard input: 'eco - e "MULTI \ nEXEC" | redis-cli' mostra 'OK'. –

+1

Nelle pipe PowerShell una serie di stringhe deve fare lo stesso: "MULTI", "DEL someKey", ... | redis-cli ... ', purché anche la versione di Windows sia stata letta da STDIN. –

+0

Incredibile, sembra funzionare! :) Se vuoi postare questa risposta, ascolterò e accetterò. Per esempio. : echo "MULTI", "EXEC" | & redis-cli -h localhost -p 6379 – jakejgordon

risposta

7

Da redis-cli sembra leggere l'input da STDIN si potrebbe alimentano un array con le stringhe di comando di questo tipo:

'MULTI', 'EXEC' | & redis-cli -h localhost -p 6379 

Uso echo (alias Write-Output) non sono richiesti per alimentare l'array in pipeline.

Si potrebbe anche memorizzare la matrice di comando in una variabile prima:

$cmds = 'MULTI', 'EXEC' 
$cmds | & redis-cli -h localhost -p 6379 
Problemi correlati