所有,

注意:我已在反馈后更新了问题。

到目前为止,感谢 @jisaak 的帮助。

我需要运行PowerShell脚本,该脚本在部署Cloud Service时添加TCP绑定(bind)和其他一些内容。

这是我的云服务项目:

powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

这是我的云服务项目和Webrole项目:
powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

这是我在ServiceDefinition.csdef中的任务:powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

这是我要运行的PowerShell脚本:
powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

这是我对Startup.cmd的尝试:
powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

部署时,我在Azure日志中得到了这个:
powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

而这在powershell日志中:
powershell - 需要运行PowerShell脚本的Azure云服务启动任务-LMLPHP

任何帮助将不胜感激。

我想我快到了,但是在网络上关注其他人的语法似乎并不能使我到达那里。

谢谢
拉斯

最佳答案

我认为问题在于,批处理命令解释器在运行Startup.cmd时运行的工作目录不符合预期。

Startup.cmd位于\approot\bin\Startup目录中,但工作目录为\approot\bin

因此,命令.\RoleStartup.ps1bin目录而不是bin\Startup目录中查找时无法找到RoleStartup.ps1。

我知道的解决方案是:

解决方案1 ​​:
使用..\Startup\RoleStartup.ps1从Startup.cmd调用RoleStartup.ps1。

Soltuion 2 :
在Startup.cmd中更改当前的工作目录,以便找到相对路径.\RoleStartup.ps1。我通过CHDIR %~dp0(请参阅here)执行此操作,以更改为包含Startup.cmd的目录。

解决方案3 :
正如Don Lockhart的答案所建议的,不要将Startup目录复制到输出中,而应在Visual Studio项目中将其设置为“Content”。这意味着其中的文件将存在于Azure实例的\approot\Startup目录中。 (然后,您要确保Startup文件夹不能通过IIS公开访问!)。然后,将ServiceDefinition.csdef中对Startup.cmd的引用更新为..\Startup\Startup.cmd,并将Startup.cmd中对RoleStartup.ps1的引用更新为..\Startup\RoleStartup.ps1。这基于工作目录为bin并使用..\Startup始终相对于其定位启动目录这一事实。

关于powershell - 需要运行PowerShell脚本的Azure云服务启动任务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32858396/

10-11 09:13