我正在尝试使用PSEXEC. PowerShell 脚本通过.cmd批处理文件调用。我们这样做的原因是更改执行策略,运行 powershell 脚本然后再次重置执行策略:
在远程服务器上do-tasks.cmd看起来像:
powershell -command "&{ set-executionpolicy unrestricted}"
powershell DoTasks.ps1
powershell -command "&{ set-executionpolicy restricted}"
Run Code Online (Sandbox Code Playgroud)
PowerShell 脚本DoTasks.ps1现在只是这样做:
Write-Output "Hello World!"
Run Code Online (Sandbox Code Playgroud)
这两个脚本都存在于c:\windows\system32(目前)中,因此它们位于 PATH 中。
在原始服务器上,我这样做:
psexec \\web1928 -u administrator -p "adminpassword" do-tasks.cmd
当它运行时,我在命令行收到以下响应:
c:\Windows\system32>powershell -command "&{ set-executionpolicy unrestricted}"
并且脚本不再运行。
我不能按 ctrl-c 来破坏脚本,我只能看到 ^C 字符,我可以从键盘输入输入,字符会回显到控制台。
在远程服务器上,我看到 PowerShell.exe 和 CMD.exe 正在任务管理器的进程选项卡中运行。如果我结束这些进程,那么控制将返回到原始服务器上的命令行。
我已经用一个简单的.cmd批处理文件尝试了这个,@echo hello world它工作得很好。
do-tasks.cmd通过 RDP 会话在远程服务器上运行也可以正常工作。
原始服务器运行 Windows 2003 SP2,远程服务器运行 Windows 2008 SP2。
为什么我的远程批处理文件在通过执行时卡住了 …
我想知道是否有人知道如何防止其他系统使用 psexec 在我的机器上运行服务,假设运行 Windows 防火墙不是一种选择?
此外,我读到了一个 hacky 解决方案,您可以通过该解决方案创建一个名为“psexec”的手动服务,然后立即禁用它,因为它似乎在远程系统上检查此服务,如果存在则不会运行。然而,这对我来说似乎有点恶心。有什么替代品吗?
当我在远程计算机上运行 PsExec 时,我总是达不到我想要的效果。在大多数情况下,我想要的理想情况是 a) 管理服务器上的日志,其中每个日志都有生成它的每台远程计算机的名称(例如 COMPNAME1.log、COMPNAME2.log 等)或 b) a使用我指定的任何名称在每台远程计算机上的日志文件。
当我尝试场景 (a) 时,我使用以下命令。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username cmd /c echo TEST >> \\server.company.tld\share\%computername%.log
Run Code Online (Sandbox Code Playgroud)
问题是它永远不会奏效。所有的计算机都只是写入日志,%computername%我在办公室执行 PsExec 的计算机就在其中。我想要的是 listofcomputers.txt 中特定于每台计算机的唯一日志,这些日志将正确使用远程环境变量中的主机名而不会出现问题。这甚至可能吗?它似乎对我不起作用。我试过了,语法显然是错误的。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo TEST >> \\server.company.tld\share\%computername%.log"
Run Code Online (Sandbox Code Playgroud)
PsExec 只是失败,说找不到系统文件(阅读:语法失败)。
至于场景 (b),它似乎是类似问题的变体。当我运行这样的命令时,它不起作用。
%SystemDrive%\path\to\psexec.exe @listofcomputers.txt -u DOMAIN\username "cmd /c echo %computername% >> \\server.company.tld\share\aggregated.log"
Run Code Online (Sandbox Code Playgroud)
我对 cmd.exe 控制台上的 PsExec 的远程路径和环境变量有什么不了解的地方(我什至还没有尝试过可怕的 PowerShell)。我知道这样的东西在批处理文件 ( cmd /c \\server.company.tld\share\runthis.bat) 中工作,但是在将命令作为参数执行时是否有原因它不起作用?我总是需要这个,但永远无法得到它!
是否有替代 PsExec 的替代实用程序?如果我主要使用批处理脚本进行自动化工作。由于 psexec 的不稳定,比如挂起/不响应,我可能需要另一个解决方案。社区能不能指点一下,谢谢。
编辑:我对 psexec 有 2 个特殊问题。
https://superuser.com/questions/168706/cant-start-program-by-psexec-on-windows-server-2003-64-bit
我有一个 ASP.NET Web 服务,它只从远程 SOAP API 调用调用 psexec。每天检查时,我可以看到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 = true;
psi.RedirectStandardError = true;
psi.RedirectStandardInput = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
psi.CreateNoWindow = true; …Run Code Online (Sandbox Code Playgroud) 首先,我不能使用组策略,因为我们的团队不管理它。该公司是一家庞大的 FTSE 公司,拥有一支涵盖您能想到的 IT 各个方面的团队。
我们的团队需要一种通过批处理文件或使用 Windows Installer 和 .msi 文件的脚本远程安装程序的方法。
到目前为止,我已经成功地使用 psexec 安装了 Java(见下文)
psexec \\pcname -u *username* -p *password* -i
msiexec.exe /a "msilocation\install.msi"
Run Code Online (Sandbox Code Playgroud)
这没有任何问题。但是我想要一些比这更自动化的东西。
但是,我想要做的是能够从我的机器运行脚本或批处理文件,以便在列出的所有远程工作站上安装 msi。我很确定你可以在批处理文件中列出工作站,但我可能错了。
老实说,如果我必须在脚本或批处理文件中进行修复,我不会大惊小怪。我只是不能使用组策略等。
您如何在远程计算机上弹出消息或运行程序,以便当前登录的用户可以看到它。
我们已在 WinXP 上完成此操作,但这些不适用于 Win7。
at.exe \\computername time /interactive message.vbs
Run Code Online (Sandbox Code Playgroud)
(时间是 hh:mm 未来至少一分钟)
psexec.exe \\computername -I message.vbs
Run Code Online (Sandbox Code Playgroud)
要测试它,您可以用 Notepad.exe 替换 message.vbs
我需要在我们的一些工作站上运行一个命令来卸载最前沿,并且在格式化命令时遇到了一些麻烦。
这是需要发生的事情(在多个命令中)
xcopy \\serverpath\Installer.exe C:\Windows
Install.exe /u /s
Del C:\Windows\Install.exe
我正在将 psexec 与计算机列表一起使用,但一直遇到错误。这就是我的命令现在的样子。
psexec @ComputerList.txt -u domain\administrator cmd /c (xcopy "\\NetworkPath\Forefront Software\Install.exe" "C:\Windows" && Install.exe /u /s && del C:\Windows\Install.exe)
Run Code Online (Sandbox Code Playgroud)
我认为路径名和引号中的空格把事情搞砸了......
编辑:
尝试使用脚本运行它但没有运气。看起来 scepinstall.exe 只是挂在远程机器上。我也尝试使用可以在C:\Windows\ccmsetup\
谢谢您的帮助
command-line-interface copy windows-command-prompt uninstall pstools
我知道 PsExec 非常适合通过网络上的计算机发送文件,然后在该远程计算机上执行它,但是我不能使用 PsExec,因为我正在开发一个软件,我不能将 PsExec 作为依赖项(出于法律原因等)。
在远程计算机上实现执行部分的最简单方法是什么?真的有那么难吗?我已经在用 xcopy 复制 .bat 文件了……我只需要运行它。
我正在尝试远程访问我的特定计算机,但 VNC 似乎已停止。我可以确定计算机仍在运行,因为我可以通过 VNC 连接到同一网络上的另一台机器,并且可以在 Windows 资源管理器的“网络”部分下看到我的目标机器,也可以成功 ping 通它。
总结一下:
鉴于这些条件,我如何进入目标以打开 VNC 服务器,甚至只是重新启动目标(VNC 应该在启动时打开)?
我尝试过 PsExec 并获得“访问被拒绝”,还尝试从计算机管理控制台“连接到另一台计算机..”并获得“访问被拒绝”。
我有一个运行的批处理文件,其中包括重置机器中的 NIC。我在另一台监控第一台机器的机器上运行了一些看门狗软件。当检测到某些类型的故障时,我想使用 PSExec 运行此批处理文件。我遇到的问题是,由于批处理文件重置的是 NIC,它会终止 PSExec 的连接(我对此表示同意)。真正的问题是,当 PSExec 死机时,批处理文件停止运行(使 NIC 处于禁用状态)。
我试过在 PSExec 中使用 -i 选项,但没有成功。关于基本上只是触发批处理文件而不是在 PSExec 断开连接时停止它的任何想法?