这两行代码在我的Azure RM VM上本地下载,解压缩和执行我的所有.bat和.msi文件时非常有效,我一直在通过ARM模板进行部署,我已经像疯了一样进行了修改它可能充满了漏洞,因为我对这一切都很陌生。
我一直试图通过一个JSON自定义脚本扩展通过Azure文件共享来拍摄它们,但也试图通过具有相同结果的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')]"
}
}
}
期待我能得到的任何帮助,我已经坚持了这个步骤大约两个星期了。如果您想要任何其他信息或者我不清楚,请告诉我,我会看到我能做些什么。第一次发帖,长时间读者。
答案 0 :(得分:0)
“无法找到网络路径。”让我相信这是similar situation here的一种我认为附加azure文件作为带脚本的网络驱动器并不总是可靠的。我已经给出了一个解决方案,直接从Azure文件下载链接主题,我认为也会对你有所帮助。如果它不适合你,请告诉我。
答案 1 :(得分:0)
您还可以在此处查看示例:
https://github.com/bmoore-msft/AzureRM-Samples
然后查看文件夹:
https://github.com/bmoore-msft/AzureRM-Samples/tree/master/VMCSEInstallFilePS
文件夹中的示例模板使用自定义脚本扩展来从Azure blob存储(或其他网址)安装文件。
repo的根包含一个PowerShell脚本,它可以完成两件事:
另请注意示例中的“forceUpdateTag”(请参阅:Issues deploying dscExtension to Azure VMSS)。如果您需要反复部署json模板,则需要在VM已存在时运行扩展(您还可以通过PowerShell删除-AceanRMVMExtension,标签可能更快)。
答案 2 :(得分:0)
如果您的脚本不包含任何机密或知识产权,您可以将其上传到blob存储容器并将访问策略设置为' blob ' (不是' 私人')然后您不必担心SAS令牌。
此模板适用于我(2016年4月28日),包含blob存储和PowerShell。
{
"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'))]"
}
}
}
答案 3 :(得分: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模板中的受保护设置可能是不必要的,但目前它完成了工作,我现在有一个单击部署,我可以继续构建。