我有一个带有WorkerRole的Azure项目,我有一个StartUp任务。启动任务是一个简单的.cmd文件(startup.cmd),它调用powershell脚本(PerformanceCounterInstaller.ps1)。看起来.cmd文件执行得很好,它可以找到.ps1文件(如果.ps1文件的路径或名称不正确,我在err.out文件中看到它的提及)。但是,.ps1文件的实际内容似乎完全被忽略(写入 - 输出命令,Start-Transcript,创建性能计数器......)。我没有收到任何反馈或任何显示任何尝试操作的数据都已执行。
我在err.out和std.out中的唯一数据来自.cmd文件,我无法找到任何脚本文件。
此致 马里奥。
------ ServiceDefinition.csdef的内容:------
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="WindowsAzure2" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2012-10.1.8">
<WorkerRole name="MBAzureTestServiceWorkerRole" vmsize="Small">
<Startup>
<Task commandLine="StartupTasks\startuptasks.cmd" executionContext="elevated" taskType="simple" />
</Startup>
<Imports>
<Import moduleName="Diagnostics" />
</Imports>
</WorkerRole>
</ServiceDefinition>
------ startuptasks.cmd的内容:------
cd %~dp0
echo %date% %time% >>std.out
echo %date% %time% >>err.out
powershell -ExecutionPolicy Unrestricted './PerformanceCounterInstaller.ps1' >>std.out 2>> err.out
EXIT /B 0
------ PerformanceCounterInstaller.ps1的内容:------
$serviceName = "Test Service"
# Write-Output "This is a test of the broadcasting system..."
Start-Transcript -Path startup_transcript.txt
Stop-Transcript
[more stuff]
答案 0 :(得分:0)
我认为问题是因为您将PowerShell的输出重定向到std.out。我记得这是PowerShell v2.0中的一个流行错误。尝试替换此行
powershell -ExecutionPolicy Unrestricted './PerformanceCounterInstaller.ps1' >>std.out 2>> err.out
这一行
powershell -ExecutionPolicy不受限制 ” ./PerformanceCounterInstaller.ps1'
答案 1 :(得分:0)
问题似乎是在.cmd文件中围绕ps1文件名和路径使用单引号(即')。使用双引号(即“)”使其表现正常......