Articles of pstools

如何解决简单的psExec问题?

在过去的几个星期里,我一直在search互联网,找出一个问题,我一直在使用psExec在远程计算机上打开“计算器”。 最后我也在这里问了一个问题。 我仍然没有回答这个问题,但得到这个问题的帮助变成了很多来回的答案和评论不同的方式来解决psExec。 我非常感谢我收到的帮助,所以我正在查看我所得到的思路故障排除列表 – 如果我只是search“troubleshoot psExec”并将这个列表全部在一个地方,而不是很好比在大量不同的网站上挖掘有用的掘金? 所以,考虑到这一点,本着“ 回答自己的问题”的精神,我将列出所有我已经发现的故障排除方法,然后我会问我的问题。 我不能添加很多链接,因为我是新来的这个网站,所以我很抱歉的信贷和链接的来源最less。 在命令的\\targetmachine部分,尝试使用计算机名称或IP地址。 有时一个人在另一个人的时候不工作。 使用-i开关使程序在远程机器上交互。 使用-d开关,所以当你正在执行的程序仍在运行时, cmd不会挂起。 试图运行简单的程序,而不是你正在运行的程序(例如calc , cmd ,或者制作一个简单的.bat文件来testing),来检查你的语法是否错误。 使用类似的命令定位另一台计算机,查看该命令是否有效。 如果您已经尝试使用-d开关,请运行您的程序并让其挂起一段时间,以查看系统是否运行缓慢。 有时候一些程序会花费一些时间。 运行其他psTools,如psList或psService来检查是否有权访问远程机器 检查目标计算机是否可以访问本地计算机的另一种方法是打开一个Windows资源pipe理器窗口,然后在地址栏中input: \\targetcomputername\c$ 。 这应该使您可以访问目标的C:驱动器中的文件夹。 以pipe理员身份运行cmd 使用用户名和密码开关( -u和-p )。 尝试与您的常规帐户,然后尝试与您的pipe理员帐户(如果你有)。 可接受性既可以被写成acacpteula也可以被/accepteula – 显然,某种方式与某些系统一起工作,一种方式与其他系统一起工作。 在你的命令中插入-accepteula两次,因为第一个有时会被“吞噬”,不会被执行(从这个post )。 通过远程连接转到目标计算机上或物理上运行它,然后在命令提示符下运行psExec ,以便手动接受popup的许可协议。 ( accepteula应该这样做,但显然它有时不工作) 在目标计算机上手动运行psExec以查看您的计算机是否是问题。 检查目标计算机上是否已启用admin$共享 在Sysinternals论坛中,从karlchen的post后面跟随适合您的Windows版本的方向,然后运行build议的三行代码。 检查目标的防火墙或防病毒是否允许psExec。 如果可以,请closures防火墙并再次尝试该命令。 尝试使用具有相同防病毒和防火墙设置的另一个目标的命令,以查看防火墙/防病毒是否是问题。 尝试设置UAC(用户帐户控制)在目标计算机上“从不通知”/closures。 尝试caching您的凭据,如果你需要自己的不同凭据(从这个职位 ) psExec下载页面和Sysinternals psExec常见问题和论坛是很好的资源。 我写在这里的这些故障排除思路都没有解决我的问题,所以这意味着有更多的想法。 如何解决psExec像我这样的简单问题 (只需打开一个简单的程序,如计算器)?

PSExec的交互模式不适用于控制台应用程序

我正尝试使用PSExec在交互式状态下启动远程计算机上的控制台应用程序。 当我运行这样的东西: PsExec.exe -s -d -i 1 \\MyServer notepad.exe 它启动记事本就好了。 如果我然后运行这个: PsExec.exe -s -d -i 1 \\MyServer C:\Temp\MyConsoleApp.exe 它启动命令窗口,但根据我所知,没有做任何事情。 和我一样,当我在本地运行我的控制台应用程序时,它每5秒钟显示一次“心跳”,但是当我远程运行它时,命令窗口中不显示任何内容。 .exe在任务pipe理器中显示为一个进程。 有任何想法吗?

为什么psExec无限期挂起,不给错误?

我只是试图在远程机器上打开计算器,以便在编写更大的脚本之前testing连接。 我还没有专业psexec,但我从来没有见过之前发生的事情,无法find任何地方这个问题的答案。 我正在尝试每个我知道的简单命令的版本: psexec \\target calc 我的电脑正在运行Windows 7 Enterprise。 目标正在运行Windows 2008 R2。 当我点击“Enter”时,该命令看起来应该像最初一样运行。 我收到有关“正在连接…”和“正在启动psexec …”的两条消息,但没有任何反应。 计算器不能在目标计算机上启动,psexesvc不会启动,我不会收到任何错误或消息,并且我无法从cmd窗口获取控制权。 我必须closures它。 这是我曾尝试不同的组合: -i和-d开关。 -u和-p与我的正常帐户和pipe理员帐户 -accepteula , /accepteula ,并使用accepteula 这个职位的两倍 在目标机器上运行psExec以手动接受第一次使用时popup的许可协议 检查Admin $共享已启用 在这篇文章中跟随了卡尔臣的大部分指令,并成功地运行了三行代码。 通过在Sysinternals论坛的psExec常见问题中看起来相关的任何文章进行search。 执行计算器以外的程序,如cmd和我放在目标桌面上的简单batch file 把cmd窗口打开几个小时,看看是不是要花时间 在其他目标机器上(成功)运行psExec,看看我的电脑是否有问题 psList和psService在目标计算机上工作 以pipe理员身份运行cmd 可以使用相同的防病毒设置在其他服务器上成功运行此命令 试了一下在给出的两个答案中提出的一切 这些事情都没有改变的结果,或帮助我find一种方法来改变他们。 还有什么我可以尝试解决这个问题?

由于在防火墙中禁用了文件和打印共享,PsExec将无法工作

我们运行在Citrix / Wyseterminal环境(200多个terminal) 所有用户的Wyseterminal都没有连接到域,用户使用本地用户帐户login,没有密码(还有另一个pipe理员帐户密码,我们用来进行更改)。 默认情况下,我们的Wyseterminal版本已启用Windows防火墙+文件和打印共享禁用/取消打勾。 我们有一个要求,每晚重新启动所有的terminal,并有一个PsExec脚本计划运行所有networkingterminal。 问题是任何PsExec CMD不会执行远程IP地址/机器,除非a)该机器防火墙被禁用或b)文件和打印共享启用 – 因此它可以访问Admin $共享。 由于不必手动绕过防火墙所在的所有机器并禁用它/允许“文件和打印”共享,无论如何远程启用F&P共享可以通过其他非PsExec cmd或远程添加registry项(请记住GPo不能用于机器不在networking上) 我们尝试通过本地用户帐户和PC名称运行PsExec命令通过-u和-p开关,但没有运气。 只要启用F&P共享或在testing机器上完全禁用防火墙,远程PsExec脚本就可以工作。

在远程计算机上执行命令并显示UI以login用户

因为我在网上找不到任何适当的解决scheme,我会在这里问。 我有一堆电脑,我想要执行一个程序,并显示程序GUI到当前login的用户。 Afaik这是不可能与Powershell(停止/启动的Windows服务是没有问题的),我无法设法得到这与PsExec.exe完成。 我的PsExec命令看起来像这样 – calc.exe在TaskManager中可见,但是我看不到GUI。 C:\Users\Administrator.DEV\Desktop>PsExec.exe -i \\TEST-CLI-01 -u localUser -p userPassword -d calc.exe 简短设置说明:服务器:MS Server2012R2客户端:Windows 8.1每个系统都是AD域的一部分。 任何人都有一个想法,我怎么能做到这一点? Thx很多提前:)

为什么PSEXEC没有指定密码?

当我运行SysInternals PSEXEC在远程机器上启动进程时,如果我在命令行中指定了密码,它将失败: PsExec could not start cmd.exe on web1928: Logon failure: unknown user name or bad password. psexec \\web1928 -u remoteexec -p mypassword "cmd.exe" 要么 psexec \\web1928 -u web1928\remoteexec -p mypassword "cmd.exe" 如果我只是指定: psexec \\web1928 -u remoteexec "cmd.exe" 并input密码它工作得很好。 原始服务器是Windows 2003,远程服务器是Windows 2008 SP2。 remoteexec帐户只存在于远程服务器上,并且是Administrators组的成员。

使用winexe启动Windows进程

当我在Windows上时,我使用PsExec在其他Windows机器上启动进程。 我现在有这样的情况,我想从一台Linux机器上做到这一点。 幸运的是, winexe是一个像PsExec一样工作的小程序,仅用于Linux世界。 我没有安装它的问题,我可以开始像cmd.exe进程。 问题是我无法启动Windows用户可见的进程。 如果我启动calc.exe,我可以看到它在任务pipe理器中启动,但没有GUI。 题: 如何启动在Windows机器上实际可见的进程?

通过脚本或batch file远程安装程序

首先,我不能使用组策略,因为我们的团队不pipe理。 该公司是一个庞大的富时公司,拥有一支可以想到的IT各个方面的团队。 我们的团队需要通过批量文件或使用Windows Installer和.msi文件的脚本来远程安装程序。 到目前为止,我已经设法使用psexec来安装Java(见下文) psexec \\pcname -u *username* -p *password* -i msiexec.exe /a "msilocation\install.msi" 这工作没有任何问题。 不过,我想要一些比这更自动的东西。 然而,我想要做的是能够从我的机器上运行脚本或batch file,它将在所有列出的远程工作站上安装msi。 我很确定你可以在batch file中列出工作站,但我也许是错的。 如果我不得不在脚本或batch file中进行修复,那么我就不要慌张了。 我只是不能使用组策略等

PsExec和远程环境variables,日志logging等

当我在远程计算机上运行PsExec时,我总是缺less我想要的东西。 在大多数情况下,理想的情况是a)在pipe理服务器上login一个日志,每个日志都有它生成的每个远程计算机的名称(如COMPNAME1.log,COMPNAME2.log等)或者b)一个在每个远程计算机上使用我指定的名称logging文件。 当我尝试场景(a)时,我使用以下命令。 %SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username cmd /c echo TEST >> \\server.company.tld\share\%computername%.log 问题是它从来没有工作。 所有的计算机只写入日志, %computername%就是我在办公室执行PsExec的计算机。 我想要的是listofcomputers.txt中特定的每台计算机的唯一日志,它将正确使用来自远程环境variables的主机名而不会出现问题。 这甚至可能吗? 这似乎并不适用于我。 我试过了,语法显然是错误的。 %SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo TEST >> \\server.company.tld\share\%computername%.log" PsExec只是失败,说系统文件无法find(阅读:语法失败)。 至于情况(b),它似乎是一个类似问题的变化。 当我像这样运行一个命令,它不起作用。 %SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo %computername% >> \\server.company.tld\share\aggregated.log" 有没有我不明白的有关cmd.exe控制台上的PsExec远程path和环境variables(我甚至还没有尝试过可怕的PowerShell)。 我知道这样的事情在一个batch file( cmd /c \\server.company.tld\share\runthis.bat )中工作,但是有一个原因,当执行命令作为参数不会工作? 我总是需要这个,永远不能得到它!

PsExecselect

有没有其他的工具来取代PsExec? 如果我主要使用批处理脚本进行自动化工作。 由于psexec的不稳定性,如挂起/不响应,我可能需要另一种解决scheme。 社区build议,谢谢。 编辑:我有2 psexec特殊问题。 https://superuser.com/questions/168706/cant-start-program-by-psexec-on-windows-server-2003-64-bit 我有一个ASP.NET Web服务,它只从远程SOAP API调用调用psexec。 每天检查的时候,我都能看到任务pipe理器里挂着10-20个psexec。 在高峰期,Web服务器收到约1-5个请求,但可能只持续5分钟。 以下是我的代码。 Process psexecProcess = new Process(); ProcessStartInfo psi = new ProcessStartInfo("PsExec.exe"); string psexecArg = "-u " + GetRemoteAccount(serverType) + " -p " + GetRemotePW(serverType) + " \\\\" + GetManagementServerIP(serverType) + " C:\\MyBatchScript.bat " + username; //set process options psi.UseShellExecute = false; psi.RedirectStandardOutput = […]