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);
        }