我实际上不确定这是否可能。让我们看看:
我有一个在 Build 服务器上运行的脚本。我们将其命名为服务器 A。
它将 bins 放到服务器 B 上的共享文件夹中。我想在服务器 C 上运行该程序。
因此,使用 caspol 我可以允许可执行文件远程运行。这意味着从 BI 可以运行 \C\shared\my.exe
我想要做的是从 A 在 B 上运行 \C\shared\my.exe。
SysInternals\PsExec.exe -u username -p password -accepteula \\ServerC -i 0 -d -w \\ServerB\Nightly\Server \\ServerB\Nightly\Server\server.exe
用户拥有所有必要的权利。
但是,-w(工作目录)选项显然需要相对于我指向的服务器的路径。有什么想法吗?
答案1
在不知道应用程序做什么的情况下,您是否需要定义工作路径?我可能错了,但我不相信 UNC 路径受支持?那么,使用一点小技巧,映射网络驱动器并将其捆绑在脚本中如何?例如:
pushd \\ServerB\Nightly\Server
server.exe
popd
将其放入脚本中,然后使用 psexec 调用它:
psexec -u username -p password \\machine -accepteula -i 0 -d \\serverb\nightly\server\myscript.bat
答案2
也尝试使用 -e 开关(不尝试加载用户的配置文件)不太确定“-accepteula”开关,因为据我所知 psexec 没有提示输入一个开关,而且这似乎不是 psexec 的有效开关……
2 个开关“-i”和“-d”相互矛盾,因为 -i 使其以交互方式运行,而 -d 表示仅将其用于非交互式应用程序。我从未需要使用任何一个开关。
我发现,解决涉及远程系统的麻烦操作的最佳方法是首先尝试在本地运行它,然后慢慢开始将不同的组件移动到远程框并让它们从那里开始工作。这样你就能准确地找出你最初尝试的语法中的问题所在。
答案3
我可以这样做:
psexec -s -username domain\username -p MyPassw@rd @c:\temp\computers.txt \\fileserver\SCCMClient\CCMSetup.exe
-s
需要避免出现“访问被拒绝”错误
-username
,并且-p
需要连接到具有可执行文件的文件服务器
我个人认为 PSExec 是一个很棒的小工具!
答案4
您可以在脚本中将要运行的内容复制到本地计算机磁盘,然后在运行后将其删除。使用 robocopy.exe \UNC-Path LocalDestionation 复制文件,运行它,然后将其删除。请记住,您始终可以使用 %Temp% 等环境变量。
对于使用 Sysinternals PSExec 运行的情况,您可以尝试制作一个运行以 PSExec 开头的每个脚本的脚本。您可以在脚本中使用 SET 命令来设置用户名等环境变量。