public string Send(string computerName, int portNumber, ScriptExecutionCommand command,
                           string encriptionKey, string encriptionSalt)
        {
            var endpoint      = "tcp://{0}:{1}".FormatString(computerName, portNumber);
            var json          = JsonConvert.SerializeObject(command);
            var encryptedJson = EncryptionHelper.Encrypt(json, encriptionKey, encriptionSalt);

            using (var context = NetMQContext.Create())
            {
                using (var socket = context.CreateRequestSocket())
                {
                    Log.Info("Connecting to {0} on port {1}...", computerName, portNumber);
                    socket.Connect(endpoint);
                    Log.Info("Sending command...");
                    socket.Send(encryptedJson, Encoding.UTF8);

                    Log.Info("Waiting for results...");
                    var encryptedReply = socket.ReceiveString(Encoding.UTF8);
                    Log.Success("Results received");
                    var reply = EncryptionHelper.Decrypt(encryptedReply, encriptionKey, encriptionSalt);

                    return(reply);
                }
            }
        }
        private string ExecuteScriptRemotely(string scriptBody, ScriptType scriptType,
                                             string computerName, int portNumber, string targetKey)
        {
            var command = new ScriptExecutionCommand
            {
                ScriptBody  = scriptBody,
                ScriptType  = scriptType.GetName(),
                CommandTime = DateTime.UtcNow
            };

            var encriptionKey  = targetKey;
            var encriptionSalt = DomainContext.ServerKey;

            return(_targetCommandSender.Send(computerName, portNumber, command, encriptionKey, encriptionSalt));
        }