0

これらのコード行はどちらも、すべての .bat ファイルと .msi ファイルを Azure RM VM でローカルにダウンロード、解凍、実行するのに完璧に機能します。私はこれらすべてに非常に慣れていないので、穴の数。

私は、Azure ファイル共有を介して JSON カスタム スクリプト拡張機能を使用してそれらを撃ち上げようとしましたが、同じ結果で BLOB コンテナーを介してそれらを取得しようとしました。「ネットワーク パスが見つかりません」という詳細なエラー メッセージが表示され続けます。ログをスキャンしてきましたが、これを回避する方法に関する情報が見つかりません。達成しようとしていることに正しい方法で近づいていますか? 動的パラメーターを使用して展開時にインストールを自動的に取得するより良い方法はありますか?

cmdkey /add:$ArtifactsStorageAccountName.file.core.windows.net /u:$ArtifactsStorageAccountName /pass:$StorageAccountKey
Copy-Item -Path $InstallCustomScriptExtensionScriptFilePath -Destination C:\
Copy-Item -Path $InstallCustomScriptExtensionZIPFilePath -Destination C:\
Unblock-File -Path C:\UnzipMetaforceInstall.ps1
powershell -ExecutionPolicy Unrestricted -File C:\UnzipMetaforceInstall.ps1
PowerShell net use Z: \\$ArtifactsStorageAccountName.file.core.windows.net\$FileShareName\InstallMetaforce /u:artifactsstoaccastst $StorageAccountKey
PowerShell Copy-Item -Path Z:\UnzipMetaforceInstall.ps1 -Destination C:\
PowerShell Copy-Item -Path Z:\InstallMetaforce.zip -Destination C:\
PowerShell Unblock-File -Path C:\UnzipMetaforceInstall.ps1
PowerShell -ExecutionPolicy Unrestricted -File C:\UnzipMetaforceInstall.ps1

    {
      "name": "InstallCustomScriptExtension",
      "type": "extensions",
      "location": "[variables('location')]",
      "apiVersion": "2015-06-15",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmNamePrefix'), copyindex(1)))]",
        "DSCConfig"
      ],
      "tags": {
        "displayName": "InstallCustomScriptExtension"
      },
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.4",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "[parameters('InstallCustomScriptExtensionScriptFilePath')]"
          ],
          "commandToExecute": "[parameters('CommandToExecuteCustomScript')]"
        },
        "protectedSettings": {
          "storageAccountName": "[parameters('ArtifactsStorageAccountName')]",
          "storageAccountKey": "[parameters('StorageAccountKey')]"
        }
      }
    }

どんな助けが得られるか楽しみにしていますが、私はこの段階で約 2 週間立ち往生しています。追加情報が必要な場合、または不明な点がある場合は、お知らせください。できることを確認します。初投稿、長年の読者です。

4

4 に答える 4

0

「ネットワークパスが見つかりません。」これは、スクリプトを使用してネットワークドライブとしてAzureファイルを添付することが常に信頼できるとは限らない、ここでの同様の状況であると私に信じさせます。リンクされたトピックで Azure ファイルから直接ダウンロードするソリューションを提供しました。これも役立つと思います。うまくいかない場合はお知らせください。

于 2016-04-25T15:35:09.313 に答える
0

私は今週末の初めにそれを解読することができました。私のスクリプトは、powershell / JSON パラメータによっても動的になり、魅力的に機能します。

        {
      "name": "InstallCustomScriptExtension",
      "type": "extensions",
      "location": "[variables('location')]",
      "apiVersion": "2015-06-15",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', concat(parameters('vmNamePrefix'), copyindex(1)))]",
        "DSCConfig"
      ],
      "tags": {
        "displayName": "InstallCustomScriptExtension"
      },
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.4",
        "autoUpgradeMinorVersion": true,
        "settings": {
          "fileUris": [
            "[concat(parameters('_artifactsLocation'), '/', parameters('InstallCustomScriptExtensionScriptFilePath'))]"
          ],
          "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -File ', parameters('InstallCustomScriptExtensionScriptFilePath'), ' -ArtifactsStorageAccountName ', parameters('ArtifactsStorageAccountName'), ' -FileShareName ', parameters('FileShareName'), ' -StorageAccountKey ', parameters('StorageAccountKey'))]"
        },
        "protectedSettings": {
          "storageAccountName": "[parameters('ArtifactsStorageAccountName')]",
          "storageAccountKey": "[parameters('StorageAccountKey')]"
        }
      }
    }

Unzip スクリプトの内部は次のようになります。

param(
[string]$ArtifactsStorageAccountName,
[string]$FileShareName,
[string]$StorageAccountKey
)

PowerShell net use Z: \\$ArtifactsStorageAccountName.file.core.windows.net\$FileShareName\Install /u:$ArtifactsStorageAccountName $StorageAccountKey; PowerShell Copy-Item -Path Z:\Install.zip -Destination C:\;
$shell = New-Object -ComObject shell.application
$zip = $shell.NameSpace("C:\Install.zip")
MkDir("C:\Install")
foreach ($item in $zip.items()) {
$shell.Namespace("C:\Install").CopyHere($item)
}

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force

cd "C:\Install"
Unblock-File -Path "C:\Install\Install.ps1"
"C:\Install\Install.ps1" | Invoke-Expression

おそらくもう少し作業が必要で、JSON テンプレートの保護された設定はおそらく不要ですが、現時点ではそれでうまくいき、構築を続けることができるワンクリックのデプロイができました。

于 2016-05-02T12:24:05.360 に答える
0

ここでサンプルを確認することもできます。

https://github.com/bmoore-msft/AzureRM-Samples

そして、フォルダを見てください:

https://github.com/bmoore-msft/AzureRM-Samples/tree/master/VMCSEInstallFilePS

フォルダー内のサンプル テンプレートでは、カスタム スクリプト拡張機能を使用して、Azure BLOB ストレージ (または別の URL) からファイルをインストールします。

リポジトリのルートには、次の 2 つのことを行う PowerShell スクリプトが含まれています。

  1. インストールするファイルをローカル マシン (ビルド マシンなど) から Azure ストレージにコピーし、sasToken で保護し、
  2. AzureRM テンプレートをデプロイし、BLOB の URI と sasToken をデプロイに渡します。

サンプルの "forceUpdateTag" にも注意してください (「dscExtension を Azure VMSS にデプロイする際の問題」を参照してください)。json テンプレートを何度もデプロイする必要がある場合は、VM が既に存在するときに拡張機能を実行するために必要です (PowerShell を使用して Remove-AzureRMVMExtension を実行することもできます。タグの方が速い場合があります)。

于 2016-04-27T14:18:52.773 に答える
0

スクリプトにシークレットや知的財産が含まれていない場合は、それを BLOB ストレージ コンテナーにアップロードし、アクセス ポリシーを " blob " (" private " ではありません) に設定すると、SAS トークンについて心配する必要がなくなります。

このテンプレートは、ブロブ ストレージと PowerShell を使用して私 (今日 2016 年 4 月 28 日) で機能しました。

{
  "type": "Microsoft.Compute/virtualMachines/extensions",
  "name": "[concat(variables('vmName'),'/CustomScriptExtension')]",
  "apiVersion": "2015-06-15",
  "location": "[resourceGroup().location]",
  "tags": {
    "displayName": "CustomScriptExtension"
  },
  "dependsOn": [
    "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
  ],
  "properties": {
    "publisher": "Microsoft.Compute",
    "type": "CustomScriptExtension",
    "typeHandlerVersion": "1.8",
    "settings": {
      "fileUris": [ "[parameters('launchScriptBlobUri')]" ],
      "commandToExecute": "[concat('powershell -ExecutionPolicy Unrestricted -file ',parameters('scriptFileName'))]"
    }
  }
}
于 2016-04-28T18:27:18.263 に答える