用于本地文件的 Azure 自定义脚本扩展 CLI/Powershell

Posted

技术标签:

【中文标题】用于本地文件的 Azure 自定义脚本扩展 CLI/Powershell【英文标题】:Azure Custom Script Extension CLI / Powershell for Local files 【发布时间】:2020-03-09 18:21:09 【问题描述】:

我正在尝试在 VM 上使用自定义脚本扩展运行脚本。 我可以通过扩展设置中的 UI 上传我的自定义脚本(在我的本地驱动器上),但我无法通过 CLI / Powershell 执行相同操作

我正在寻找 az vm extension (CLI) / Set-AzVMCustomScriptExtension 命令可以帮助我完成上述操作,即

为存在@本地磁盘或 Azure Repo 的脚本上传/运行自定义脚本扩展

我尝试了各种方法,我能得到的最接近的是 Set-AzVMCustomScriptExtension -FileUri "file:///D:/scripts/TINFAD01.ps1" -ResourceGroupName p1cad-draas-sb-dev-dev -Location eastus -VMname TINFAD01 -Verbose -Name TINFAD01DSC -Run 'TINFAD01.ps1' |更新-AzVM -详细

给出错误:找不到部分路径(我已经仔细检查了路径,它确实存在)

【问题讨论】:

您能告诉我什么是“将自定义脚本上传到 Azure”吗?是您将脚本上传到 Azure 存储吗? 请检查我更新的描述,谢谢:) 【参考方案1】:

根据我的测试,如果你想使用自定义脚本扩展运行本地文件系统上的脚本,我们需要将脚本上传到 Azure 存储。然后我们就可以运行脚本了。更多详情请参考document。 例如: 1. 将脚本上传到 Azure 存储。

    运行脚本
Set-AzVMCustomScriptExtension -ResourceGroupName nrg-win -VMName n-win01 -Location eastus -FileUri "https://nlistorageaccntv1.blob.core.windows.net/scripts/myScript.ps1" -Run 'myScript.ps1' -Name DemoScriptExtension

此外,如果您只想运行本地脚本而不想将其上传到 Azure 存储,您可以使用 Azure VM 运行命令功能。更多详情请参考document

例如:

Connect-AzAccount
Invoke-AzVMRunCommand -ResourceGroupName '<myResourceGroup>' -Name '<myVMName>' -CommandId 'RunPowerShellScript' -ScriptPath '<pathToScript>' -Parameter @"arg1" = "var1";"arg2" = "var2"

【讨论】:

【参考方案2】:

基于编辑/修改问题的新答案:

您看过这里吗,可以将您的 PS 脚本存储在 BlobStorage 中,并将其作为 ExtensionScript CLI 命令的脚本位置引用:

https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-windows#script-location 和 https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-windows#extension-schema

您可以在此处找到有关如何执行 CLI 命令的示例: https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/custom-script-windows#using-multiple-scripts


旧答案

我猜您想将脚本复制到 Windows 虚拟机。

一种可能的解决方案是在 Windows VM 上安装 sftp 或 ssh 服务器并使用 sftp 或 scp。

另一种解决方案是利用 Azure 文件并将网络驱动器附加到 VM 和本地计算机,然后将脚本集中复制到那里。

您还可以利用 azcopy (https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-files) 并首先将脚本复制到 blob 存储,然后在 Azure 中的 VM 上将它们复制回本地。

也许最好的方法是利用 Azure DevOps(提供免费层)并创建一个管道,您可以在其中使用文件复制任务将脚本放在目标 VM (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops) 上。

【讨论】:

我正在尝试在 VM 上使用自定义脚本扩展运行脚本。我可以上传我的自定义脚本(在我的本地驱动器上)通过 UI 在扩展设置中导航,但我无法通过 CLI/Powershell 执行相同操作我正在寻找 az vm 扩展 (CLI)/Set-AzVMCustomScriptExtension 命令可以帮助我完成上述操作,即为存在@本地磁盘或 Azure Repo 的脚本上传/运行自定义脚本扩展 请查看我更新的描述了解更多详情 请看我修改后的答案 我希望能够通过我的本地磁盘加载它,因为它完全可以通过 GUI 进行,并且想要该功能

以上是关于用于本地文件的 Azure 自定义脚本扩展 CLI/Powershell的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Server 2019 自托管代理上找不到 azure cli 扩展

r R中的自定义评估回归模型脚本用于Azure机器学习

如何将 PEP 517 和 PEP 518 用于本地可用(不在 PYPI 上)系统范围的 CLI Python 脚本

Azure 函数 - 触发包含 Azure CLI 命令的 Python 脚本

将自定义 R 脚本部署为 Web 服务 Azure ML Studio

Azure ML Studio 环境中的 Python 自定义模型错误 0085,在本地环境中运行良好