docs: @Override
      public NodeStepResult executeScriptFile(
              StepExecutionContext context,
              INodeEntry node,
              String scriptString,
              String serverScriptFilePath,
              InputStream scriptAsStream,
              String fileExtension,
              String[] args,
              String scriptInterpreter,
              boolean quoted,
              final NodeExecutionService executionService,
              final boolean expandTokens
      ) throws NodeStepException
      {
          final String filename;
  
          if (null != scriptString) {
              filename = "dispatch-script.tmp";
          } else if (null != serverScriptFilePath) {
              filename = new File(serverScriptFilePath).getName();
          } else {
              filename = "dispatch-script.tmp";
          }
          String ident = null != context.getDataContext() && null != context.getDataContext().get("job")
                         ? context.getDataContext().get("job").get("execid")
                         : null;
          String filepath = fileCopierUtil.generateRemoteFilepathForNode(
                  node,
                  context.getFramework().getFrameworkProjectMgr().getFrameworkProject(context.getFrameworkProject()),
                  context.getFramework(),
                  filename,
                  fileExtension,
                  ident
          );
          try {
              File temp = writeScriptToTempFile(
                      context,
                      node,
                      scriptString,
                      serverScriptFilePath,
                      scriptAsStream,
                      expandTokens
              );
              try {
                  filepath = executionService.fileCopyFile(
                          context,
                          temp,
                          node,
                          filepath
                  );
              } finally {
                  //clean up
                  ScriptfileUtils.releaseTempFile(temp);
              }
          } catch (FileCopierException e) {
              throw new NodeStepException(
                      e.getMessage(),
                      e,
                      e.getFailureReason(),
                      node.getNodename()
              );
          } catch (ExecutionException e) {
              throw new NodeStepException(
                      e.getMessage(),
                      e,
                      e.getFailureReason(),
                      node.getNodename()
              );
          }
  
          return executeRemoteScript(
                  context,
                  context.getFramework(),
                  node,
                  args,
                  filepath,
                  scriptInterpreter,
                  quoted
          );
      }