CMD文件作为启动任务和通过RDP手动执行的反应不同

时间:2013-04-11 13:23:50

标签: azure cmd role

我想在天蓝色的环境中建立一个负载测试装置。我为2个角色创建了2个项目,让实例下载并设置TestAgent和TestController。 这对测试代理非常有用!

但它不适用于Controller-setup:我创建了一个运行.cmd文件的启动任务,该文件下载并安装了TestController。奇怪的是:cmd文件被执行(由日志校验到outfile),但它没有安装TestController。现在,当实例上的ich RDP并手动启动cmd文件时,一切正常!

这是我的启动任务定义:

  <WorkerRole name="TestController" vmsize="ExtraSmall">
    <Startup>
      <Task executionContext="elevated" taskType="simple" commandLine="setupController.cmd"></Task>

我也尝试过使用taskType背景,没有什么不同。

这是我的命令文件:

powershell $command = "set-executionpolicy Unrestricted"
powershell $command = ".\setupController.ps1" -NonInteractive >; out.txt
echo Setup TestController >> out.txt
.\testcontroller.exe /full /q >> out.txt
echo Setup was executed! >> out.txt
net user vstestagent password! /add
net localgroup Administrators vstestagent /add
REM Create a task that will run with full network privileges.
net start Schedule
schtasks /CREATE /TN "Configure Test Controller Service" /SC ONCE /SD 01/01/2020 /ST 00:00:00 /RL HIGHEST /RU vstestagent /RP password! /TR e:\approot\configcontroller.cmd /F
schtasks /RUN /TN "Configure Test Controller Service"

有谁知道这个问题?我认为这可能是一个特权问题,但是executionContext =“已升级”的rins具有管理权限......

祝你好运 塞巴斯蒂安

编辑:我搜索了Windows事件日志,发现我的CMD已执行,但没有关于testcontroller.rexe的安装。

pic1 pic2

2 个答案:

答案 0 :(得分:0)

基于上面我可以想到一个问题是,当你的批处理文件被执行时,testcontroller.exe不在正确的路径中,因此找不到它被执行。设置提升选项后,您的应用应该完全运行。

我只是组建了一个快速测试场景来启动一个控制台应用程序,该应用程序只返回一个字符串,该字符串可以通过重定向保存并从启动任务启动。

步骤1:创建一个简单的ConsoleApp,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Todays date & time is {0}", DateTime.Now);
        }
    }
}

步骤2:创建一个Startup文件夹,将ConsoleApp.exe和Startup.cmd置于下面。我还将文件属性设置为“始终复制”,因此它们是包的一部分。

enter image description here

第3步:这是我的Statup.cmd:

 @ECHO ON
 @ECHO "Launcher"
 md C:\temp
 Startup\ConsoleApp.exe  >> C:\temp\out.log
 exit /b 0

步骤4:现在当我将应用程序和远程部署到我的机器中时,我可以看到我的驱动器C:创建了一个 temp 文件夹,里面有out.log以及时间戳文件创建时。

您可以尝试完全相同,以查看您的控制台应用程序TestController是否先执行,然后修改批处理文件以获取更多功能。

答案 1 :(得分:0)

我仍然不知道为什么会这样,但如果您通过计划任务进行安装,则安装有效。

因为我认为唯一的区别可能是安装软件的帐户,我首先尝试通过runas命令安装测试控制器,但我无法传递密码和命令。因此,我创建了一个用于安装测试控制器的计划任务,并且能够将用户凭据与命令一起传递。现在我的setupController.cmd看起来像这样:

powershell $command = "set-executionpolicy Unrestricted"
powershell $command = ".\setupController.ps1" -NonInteractive >; out.txt
echo Setup TestController >> %~dp0out.txt
cd E:\approot
echo Setup has been executed! >> %~dp0out.txt
net user vstestagent MyPassword! /add
net localgroup Administrators vstestagent /add
REM Create a task that will run with full network privileges.
net start Schedule
schtasks /CREATE /TN "Install Test Controller Service" /SC ONCE /SD 01/01/2020 /ST 00:00:00 /RL HIGHEST /RU vstestagent /RP MyPassword! /TR "E:\approot\testcontroller.exe /full /q /Log %~dp0install.log" /F
schtasks /RUN /TN "Install Test Controller Service"
timeout /T 120
schtasks /CREATE /TN "Configure Test Controller Service" /SC ONCE /SD 01/01/2020 /ST 00:00:00 /RL HIGHEST /RU vstestagent /RP MyPassword! /TR e:\approot\configcontroller.cmd /F
schtasks /RUN /TN "Configure Test Controller Service"

希望它也可以帮助别人。