2015-09-03 17 views
11

Chúng tôi đang cố gắng viết một kịch bản PowerShell gọi một ứng dụng bên ngoài - một ứng dụng Redis (redis-cli.exe) - và sau đó gửi nhiều lệnh đến đó .exe. Chúng tôi không có vấn đề gửi lệnh riêng rẽ như dưới đây:Gửi nhiều lệnh tới chương trình ngoài

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

Vấn đề là điều này sẽ bắt đầu một Redis khách hàng, phát hành một lệnh duy nhất, đóng client, và sau đó trở về điều khiển PowerShell. Chúng tôi cần phát hành nhiều lệnh trong một giao dịch. Ví dụ, đây là các lệnh mà chúng tôi muốn gửi đến khách hàng:

MULTI 
DEL someKey 
DEL someSet 
EXEC 

Client Redis không hỗ trợ gửi một chuỗi LUA script như một lệnh, nhưng điều này không may không hỗ trợ MULTI/lệnh giao dịch EXEC . Nói cách khác, chúng tôi cần có khả năng phát hành nhiều lệnh như tôi đã liệt kê ở trên.

+1

Tôi không biết về PowerShell, nhưng trên tôi (Linux) hộp redis-cli mất nhiều lệnh trên đầu vào tiêu chuẩn: 'echo - e "MULTI \ nEXEC" | redis-cli' hiển thị 'OK'. –

+1

Trong đường ống PowerShell, một chuỗi các chuỗi phải làm tương tự: ''MULTI', 'DEL someKey', ... | redis-cli ... ', cũng cung cấp phiên bản Windows đọc từ STDIN. –

+0

Tuyệt vời, có vẻ như nó hoạt động! :) Nếu bạn muốn đăng bài này như là một câu trả lời tôi sẽ upvote và chấp nhận. Ví dụ. : echo "MULTI", "EXEC" | & redis-cli -h localhost -p 6379 – jakejgordon

Trả lời

7

Kể từ redis-cli dường như đọc đầu vào từ STDIN bạn có thể ăn nó một mảng với chuỗi lệnh như thế này:

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

Sử dụng echo (bí danh cho Write-Output) là không cần thiết để nuôi các mảng vào các đường ống dẫn.

Bạn cũng có thể lưu trữ các mảng lệnh trong một biến đầu tiên:

$cmds = 'MULTI', 'EXEC' 
$cmds | & redis-cli -h localhost -p 6379 
Các vấn đề liên quan