我正在尝试通过 psexec 工具启动远程命令,它在命令提示符下成功运行。但是在 c# 中,我收到以下输出错误:
访问被拒绝
.这是我的命令:
psexec \servername -u xxxxxxx -p xxxx -h -w "E:\"厘米/C "(目录)" ^> 文件.txt
这是我的 C# 源代码:
ProcessStartInfo PSI = new ProcessStartInfo();
PSI.FileName = "cmd.exe";
PSI.RedirectStandardInput = true;
PSI.RedirectStandardOutput = true;
PSI.RedirectStandardError = true;
PSI.UseShellExecute = false;
PSI.CreateNoWindow = true;
PSI.WindowStyle = ProcessWindowStyle.Hidden;
PSI.Arguments = "psexec " + @"\servername -u xxxxxx -p xxxxxxxxx -h -w "+""E:\\" "+"cmd /C " +"""+"(dir)"+ "" " +"^> file.txt" ;
p.Start();
p.WaitForExit();
output = p.StandardOutput.ReadToEnd().ToString();
error = p.StandardError.ReadToEnd().ToString();
对不起,我还不能发表评论!
读取您的 c# + psexec 代码,看起来像它发送 psexec servername -u xxxxxxx -p xxxxxxxxxx -h -w "E:\" cmd /C "(dir)" ^> file.txt
命令提示符
以psexec servername -u xxxxxxx -p xxxxxxxxxx -h -w "E:" cmd /C "(dir)" ^> file.txt
结尾不应该"psexec " + @"\servername -u xxxxxx -p xxxxxxxxx -h -w "+""E:\" "+"cmd /C " +"""+"(dir)"+ "" " +"^> file.txt";
吗?
为了进行测试,我建议您创建一个字符串,该字符串将接收这些值然后显示它,以确保设置了正确的命令。
另一件事是PSI.UseShellExecute = false;
,我知道某些命令代码必须有这个设置为 false 才能工作,但我不知道 psexec,您是否也已经尝试将其设置为 true?
如果运行代码的服务器位于域下,则需要添加域以及用户名。
因此,-u
标志将是 -u your_domain_nameusername
.