2015-09-03 34 views
11

Próbujemy napisać skrypt PowerShell, który wywołuje zewnętrzną aplikację - klienta Redis (redis-cli.exe) - a następnie wysyła wiele poleceń do tego pliku .exe. Nie mamy problem wysyłanie indywidualnych poleceń jak poniżej:Wysyłanie wielu poleceń do zewnętrznego programu

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

Problemem jest to, że klient zacznie Redis, wydać jedno polecenie, zamknij klienta, a następnie powrócić do kontroli PowerShell. Musimy wydać wiele poleceń w transakcji. Na przykład, tutaj są polecenia, które chcemy wysłać do klienta:

MULTI 
DEL someKey 
DEL someSet 
EXEC 

Klient Redis obsługuje wysyłanie ciąg skryptu LUA jako polecenia, ale ten niestety nie obsługuje komendy/EXEC transakcyjnych MULTI . Innymi słowy, musimy mieć możliwość wydawania wielu poleceń, takich jak wymienione powyżej.

+1

nie wiem o PowerShell, ale na moim (Linux) box Redis-CLI wykonuje wiele poleceń na standardowym wejściu: 'echo - e "MULTI \ nEXEC" | redis-cli' pokazuje "OK". –

+1

W potokach PowerShell tablica łańcuchów powinna robić to samo: '' MULTI ',' DEL someKey ', ... | redis-cli ... ', pod warunkiem, że wersja Windows jest również odczytywana ze STDIN. –

+0

Awesome, wydaje się działać! :) Jeśli chcesz to opublikować jako odpowiedź, zrobię i zaakceptuję. Na przykład. : echo "MULTI", "EXEC" | & redis-cli -h localhost -p 6379 – jakejgordon

Odpowiedz

7

Od redis-cli wydaje się odczytać dane wejściowe z STDIN można go karmić tablicę z ciągów poleceń, takich jak ten:

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

Korzystanie echo (alias Write-Output) nie jest wymagane w przypadku karmienia tablicę do rurociągu.

Można również zapisać tablicę polecenia w zmiennej pierwszy:

$cmds = 'MULTI', 'EXEC' 
$cmds | & redis-cli -h localhost -p 6379 
Powiązane problemy