2016-05-02 31 views
1

晴れやかなマシン(Windows Server 2012 R2データセンター)にアプリケーションのインストールを自動化するのに問題があります。Azure CustomScript Extension - WindowsVM - 再起動 - コンピュータ - 起動時にスクリプトを起動する

私のスクリプトを2つの段階で書かれている:

  • ステップ1:.NET4.6.1のインストールが
  • ステップ2をインストールを完了するために再起動します。私のアプリケーションのインストール

私はマシンの再起動時にスクリプトを再起動できません。

ScheduldedTaskまたはでschtasksを使用して技術がありますが、それは私は、リモートデスクトップを使用してマシンにログオンしています唯一の成功です。 Azure CustomScript Extensionでスクリプトを実行すると、スクリプトは再起動のためにスケジュールされません。

目的は、ARMのデプロイメントを実行することです。このデプロイメントは、自分の部品の動作をせずにCustomScript Extensionを使用してアプリケーションをインストールします。ここで

はScheduldedTaskでウェイクアップタスクを作成するために私のコードです:ここでは

$ Pstart = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" 
$ Actionscript = "& `"C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.4\Downloads\0\MyScript.ps1`"" 
$ Action = New ScheduledTaskAction -execute $ pstart -argument $ actionscript 
$ Trigger = New ScheduledTaskTrigger -AtStartUp 
Register-ScheduledTask ` 
    -TaskName $TaskName ` 
    -Action $Action ` 
    -Trigger $Trigger ` 
    -RunLevel Highest ` 
    -User "$Userdomain\$Username" ` 
    -password $UncryptedPassword 

がSCHTASKSと私のコードです:

schtasks /create ` 
    /RU $username ` 
    /PR $UncryptedPassword ` 
    /SC ONSTART ` 
    /TN $taskName ` 
    /TR "'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe' & `"C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.4\Downloads\0\MyScript.ps1`"" ` 
    /RL HIGHEST 

これらの2つのコードVM上でスクリプトをアクティブ化wakeup、ですが、リモートデスクトップから実行した場合に限ります。

AzureCustomScriptExtensionで実行するとエラーが表示されます。

+0

スケジュールされたタスクが必要/必要なのか、インストールの再起動に対処するための回避策だったのでしょうか。NET 4.6.1?あなたのアプリがインストールされるまで、.NETの再起動を抑止することができますか? (あなたのアプリのインストールには.NETが必要ないと仮定します) –

+0

ありがとうございました。いいえ、インストールに.NET4.6.1が必要です(linqpadを使用しています)。そして私はそのような種類の問題も処理できるようにしたいと思っています:-D –

答えて

1

ユーザーがRDPを介して接続しているときにタスクが実行されるため、プロファイルの読み込みが考えられます。 Windows Server 2012 R2のソリューションである可能性があるKB資料https://support.microsoft.com/en-us/kb/2968540が見つかりました。

+0

ありがとうございました。しかし私の問題は起動時にスクリプトを実行することであるため、起動前にスクリプトを実行するにはどうすればよいですか?または、問題がcustomScriptの時間(step1)にあることを示唆していますか? –

+0

この記事では、Windows Server 2012 R2の修正プログラムを適用する方法について説明します。これはスクリプトの最初の部分である可能性があります(独自のイメージを作成することもできますが、おそらく、修正プログラムを試して問題が解決するかどうかを確認することができます。1.修正プログラムを適用します。2.起動スクリプトを定義します。3. RDPを使わずに試します。それがうまくいくなら、ステップ1を自動化したいでしょう。 – benjguin

+0

このパッチはメールのみで送信されたようです。それを待っている。ありがとう –

1

コンピュータを再起動できるように、最終的にcustomScriptではなくDSCに移動しました。 DSCはすでにWindows仮想マシンにインストールされているので、実際には回避策ではないと思います。ここで

は、DSC用のコードです:

# dscScript.ps1 
Configuration InstallDotNet 
{ 
    Node "localhost" 
    { 
     LocalConfigurationManager 
     { 
      RebootNodeIfNeeded = $true 
     } 

     File Download_Directory 
     { 
      Ensure   = "Present" 
      Type   = "Directory" 
      DestinationPath = "C:\DeploymentDownloads" 
     } 

     Script Install_dotNet461 
     { 
      DependsOn = "[File]Download_Directory" 
      GetScript = { @{ Result = "" } } 
      TestScript = { $false } 
      SetScript = { 
       Write-Verbose "Install_dotNet461" 
       $client = New-Object -TypeName System.Net.WebClient 
       $url = "https://download.microsoft.com/download/E/4/1/E4173890-A24A-4936-9FC9-AF930FE3FA40/NDP461-KB3102436-x86-x64-AllOS-ENU.exe" 
       $dest = "C:\DeploymentDownloads\net461.exe" 
       for ($i=1; $i -le 10; $i++) { 
        try { 
         $client.DownloadFile($url, $dest) 
        } 
        catch { 
         $now = date 
         if ($i -eq 9) { 
          Write-Error "${$now} -- Error when downloading $url, exiting" 
          return 
         } 
         else { 
          Write-Warning "${$now} -- Error when downloading $url, attempting in a moment ..." 
         } 
         Start-Sleep $i * 2 
        } 
       } 

       $psi = new-object "Diagnostics.ProcessStartInfo" 
       $psi.FileName = $dest 
       $psi.Arguments = " /q" 
       $proc = [Diagnostics.Process]::Start($psi) 
       $proc.WaitForExit() 
      } 
     } 
    } 
} 

そしてここでは、ARMの展開のためのコードは、(あなたのVMにそのコ​​ードを追加します)です:

"resources": [ 
       { 
        "type": "extensions", 
        "name": "dscExtension", 
        "apiVersion": "2015-05-01-preview", 
        "location": "[resourceGroup().location]", 
        "dependsOn": [ 
         "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" 
        ], 
        "properties": { 
         "publisher": "Microsoft.Powershell", 
         "type": "DSC", 
         "typeHandlerVersion": "2.9", 
         "autoUpgradeMinorVersion": "true", 
         "settings": { 
          "modulesUrl": "[parameters('provisionUrl')]", 
          "privacy": { 
           "DataCollection": "Disable" 
          }, 
          "configurationFunction": "dscScript.ps1\\InstallDotNet", 
          "properties": { 
           "EventstoreLinqpadScriptUrl": "[parameters('provisionEsScriptUrl')]" 
          } 
         } 
        } 
       } 
      ] 
  • provisionUrlは、URLでありますDSC zipファイル(あなたのzipのルートにあるps1スクリプトを使って)。
  • ARMのsasTokenオプションが盗聴されているようで、urlとsasTokenの間に?を追加していないようなので、プライベートBLOB(azure cliはsasTokenまたはsasTokenを返すことができます)用にsasTokenに連結されたURLを直接使用します。
関連する問題