所有
注意: 我在收到一些反馈后更新了问题。
感谢 @jisaak 给予他的帮助。
我需要运行PowerShell脚本,在部署Cloud Service时添加TCP绑定和其他一些东西。
以下是我的云服务项目:
这是我的Cloud Service Project和Webrole项目:
这是我在ServiceDefinition.csdef中的任务:
非常感谢任何帮助。
我认为我差不多了,但在网络上关注其他人的语法似乎并不能让我在那里。
感谢 拉斯
答案 0 :(得分:3)
我认为问题是批处理命令解释程序在运行Startup.cmd时的工作目录运行不符合预期。
Startup.cmd位于\approot\bin\Startup
目录中,但工作目录为\approot\bin
。
因此,命令.\RoleStartup.ps1
无法找到RoleStartup.ps1,因为它在bin
目录中查找而不是bin\Startup
目录。
我知道的解决方案是:
解决方案1 :
使用..\Startup\RoleStartup.ps1
从Startup.cmd调用RoleStartup.ps1。
Soltuion 2 :
更改Startup.cmd中的当前工作目录,以便找到相对路径.\RoleStartup.ps1
。我通过CHDIR %~dp0
执行此操作(请参阅here)以更改为包含Startup.cmd的目录。
解决方案3 :
正如Don Lockhart的回答建议的那样,不要将Startup目录复制到输出中,而是将其设置为" Content"在Visual Studio项目中。这意味着其中的文件将存在于Azure实例的\approot\Startup
目录中。 (然后,您需要确保通过IIS无法公开访问Startup文件夹!)。然后将ServiceDefinition.csdef中对Startup.cmd的引用更新为..\Startup\Startup.cmd
,并将Startup.cmd中对RoleStartup.ps1的引用更新为..\Startup\RoleStartup.ps1
。这适用于工作目录为bin
并使用..\Startup
来始终找到相对于它的Startup目录的事实。
答案 1 :(得分:0)
您不需要在cmd中设置executionpolicy - 只需调用脚本即可。此外,您应该使用相对路径,因为您不能依赖C
磁盘。
将您的批次更改为:
powershell -executionpolicy unrestricted -file .\RoleStartup.ps1
右键单击Visual Studio中的RoleStartup.ps1
和Startup.cmd
,确保Copy to Output directory
设置为copy always
。
如果仍然无效,请删除csdef
中的启动调用,将服务rdp部署到其中,然后尝试自行调用脚本以检索任何错误。
修改:
尝试采用以下脚本:
Import-Module WebAdministration
$site = $null
do # gets the first website until the result is not $null
{
$site = Get-WebSite | select -first 1
Sleep 1
}
until ($site)
# get the appcmd path
$appcmd = Join-Path ([System.Environment]::GetFolderPath('System')) 'inetsrv\appcmd.exe'
# ensure the appcmd.exe is present
if (-not (Test-Path $appcmd))
{
throw "appcmd.exe not found in '$appcmd'"
}
# The rest of your script ....
答案 2 :(得分:0)
我发现过去不容易将内容复制到输出目录。我已经批准\ bin作为工作目录。我的startUp任务元素的commandLine属性使用对.cmd文件的相对引用,如下所示:
.cmd文件也相对于工作目录引用PowerShell脚本:
PowerShell -ExecutionPolicy Unrestricted -f ..\StartUp\RoleStartup.ps1
答案 3 :(得分:0)
确定,
因此,经过多次不同尝试才能使其恢复正常。 我尝试过使用:
由于安全性或事件的时间安排以及IIS尚未完全设置,没有任何工作。
所以我终于咬了一口子并使用了我的Webrole.cs => public override bool OnStart()方法:
在ServiceDefinition.csdef中结合使用:
现在一切正常。这是不最令人满意的结果,因为其他一些方法感觉更优雅。此外,许多其他人发布了他们获得其他工作方式。也许我最终会到达那里,但我的时间有限。
感谢 拉斯