代码之家  ›  专栏  ›  技术社区  ›  Tony O'Connor

在ASP中运行PSEXEC进程。NET作为不同的用户

  •  1
  • Tony O'Connor  · 技术社区  · 6 年前

    我正在尝试使用psExec从IIS服务器上发布的ASP web应用程序连接到某些服务器,启动应用程序并获取输出。

    访问被拒绝

    但如果我像管理员一样做,我只会得到输出、错误和异常变量的空字段。此外,当我使用visual studio在本地pc上执行此操作时,它会正常工作。

    我做错了什么?这是我的代码:

    try
            {
               Process p = new Process();
                p.StartInfo.UseShellExecute = false;
                p.StartInfo.RedirectStandardOutput = true;
                p.StartInfo.RedirectStandardError = true;
                p.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866);
                p.StartInfo.StandardErrorEncoding = Encoding.GetEncoding(866);
                p.StartInfo.FileName = @"C:\inetpub\wwwroot\Monitoring\bin\PsExec.exe";
                    server = "dp-next.b42";
                p.StartInfo.Arguments = @" \\" + server + " \"c:\\program files\\omniback\\bin\\omnirpt.exe\" -report list_sessions -timeframe 12 12";
                p.StartInfo.UserName = "admin";
                p.StartInfo.Domain = "domain";
    
                string pass = "password";
                SecureString s = new SecureString();
                foreach(char c in pass)
                {
                    s.AppendChar(c);
                }
                p.StartInfo.Password = s;
                p.StartInfo.CreateNoWindow = true;
                p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                p.Start();
                output = output + p.ProcessName;
                //output = p.StandardOutput.ReadToEnd();
                while ((res = p.StandardOutput.ReadLine()) != null)
                {
                    i++;
                    output = output + res;
                }
    
                errors = p.StandardError.ReadToEnd();
                p.Close();
            }
            catch (Exception ex)
            {
                exe = ex.ToString();
            }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Andrea    6 年前

    我曾经不得不开发出一些非常相似的东西。这就是我所做的。

    而不是使用:

    p.StartInfo.UserName = "admin";
    p.StartInfo.Domain = "domain";
    p.StartInfo.Password = s; 
    

    我将用户名和密码直接放在PsExec命令参数中(分别使用 -u -p ). 在您的情况下:

     p.StartInfo.Arguments = @" \\" + server + " -u YOUR_DOMAIN\\YOUR_USERNAME -p YOUR_PASSWORD \"c:\\program files\\omniback\\bin\\omnirpt.exe\" -report list_sessions -timeframe 12 12";
    

    有关PsExec用法的更多信息 here .