Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有启动任务的Windows Azure虚拟机_Windows_Powershell_Azure_Azure Virtual Machine - Fatal编程技术网

具有启动任务的Windows Azure虚拟机

具有启动任务的Windows Azure虚拟机,windows,powershell,azure,azure-virtual-machine,Windows,Powershell,Azure,Azure Virtual Machine,有没有办法通过API向Windows Azure虚拟机添加(参数化)启动任务?我需要在机器启动后执行cmdlet,代码取决于两个参数,这两个参数对于每台机器都是不同的。我知道这对于Web/工作者角色来说是很容易实现的,但是对于虚拟机也可以做到吗?否。目前还没有现成的功能 然而,考虑到您无论如何都要处理VM,您可以创建自己的映像。您可以在中注册“启动任务”。和sysprep使用此设置启动操作系统 这样,您将基本上有一个启动任务,它将在您的机器第一次启动时执行,而不会在随后的VM重新启动时执行 对于

有没有办法通过API向Windows Azure虚拟机添加(参数化)启动任务?我需要在机器启动后执行cmdlet,代码取决于两个参数,这两个参数对于每台机器都是不同的。我知道这对于Web/工作者角色来说是很容易实现的,但是对于虚拟机也可以做到吗?

否。目前还没有现成的功能

然而,考虑到您无论如何都要处理VM,您可以创建自己的映像。您可以在中注册“启动任务”。和sysprep使用此设置启动操作系统

这样,您将基本上有一个启动任务,它将在您的机器第一次启动时执行,而不会在随后的VM重新启动时执行


对于Web/Worker角色来说,在VM代码中加入参数并不是那么容易。对于任何您想要的内容,您都必须直接查询Azure管理API。您可以从Azure VM上运行的代码中获得的唯一属性基本上是正常的操作系统属性,即主机名、主机IP地址。你甚至不知道你的云服务名称,也不知道你的虚拟IP地址(这可以通过whatismyip.net或类似的服务发现)。所以我的方法是将参数放入Azure表存储中,并使用机器名作为行键。因此,我可以基于VM名称存储任何特定于VM的值。我的“启动”任务将查询表存储,提供我的主机名作为rowKey(以及分区键的一些常见模式),因此它将获得所有必需的设置。

对于VM的首次运行,您可以通过CustomData插入启动任务。这在Linux和Windows虚拟机中都有效。您只需要根据RESTAPI文档对文件(无论是文本还是二进制)进行正确的base-64编码


CustomData被放入特定位置的文件中,您可以使用代码查找此文件,并根据需要采取某种类型的启动操作:

  • Windows:
    %SYSTEMDRIVE%\AzureData\CustomData.bin
  • Linux:
    /var/lib/waagent/CustomData
注意:这也将添加到CLI(pull请求已经可用-不确定是否在最新版本中)

编辑是的,customdata现在是Azure CLI的一部分,作为
Azure vm create
的一个参数,因此无需自行处理base-64编码:

使用,您可以设置启动脚本,该脚本将在VM启动时运行。 总之,它会激活远程powershell,并在检测到powershell端口打开时远程运行脚本


我是这个工具的开发者,但我并不真正理解你所说的“参数化”,换句话说,你希望你的脚本能够访问VM信息?

太好了,非常感谢你的回答!关于参数,我可以使用CreateDeployment方法的CustomData参数吗?()据说创建了一个%SYSTEMDRIVE%\AzureData\CustomData.bin,我可能可以从代码中读取它?或者这种情况发生得太晚了(在我的启动任务执行之后)?嗯,实际上在RunOnce中执行的代码可能可以读取它,但我从未测试过这种情况。“CustomData被放入特定位置的文件中,您可以使用代码查找此文件,并根据需要采取某种类型的启动操作"你能详细说明一下吗?这段代码应该放在哪里?这与上一篇文章中的想法相同吗?启动代码在注册表中?或者有没有一种方法可以让CustomData文件在不从其他地方调用的情况下执行?谢谢。CustomData只是一个文件。你需要一些代码来寻找它的存在并用它来做一些事情h it。Windows和Linux操作系统都可以通过脚本、操作系统设置等方式在启动时添加要运行的进程。您可以运行控制台风格的应用程序,在目录中查找文件,找到文件,采取特定操作,然后删除文件。如果应用程序检查时文件不存在,它可以简单地退出,甚至将VM的启动顺序修改为s顶级运行本身。@DavidMakogon这个自定义数据文件是否可以执行?使用cmd或powershell?是的,我的意思是,我希望它能够从VM上的文件(或外部源存储帐户或GitHub)中读取参数。这个工具看起来不错,但我需要通过代码执行(以便它可以自动执行).遗憾的是,Azure中没有内置的功能来实现这一点:(