如何向Azure PowerShell的Set-AzVmRunCommand传递参数?
使用Set-AzVmRunCommand构造参数的正确方法
核心要点
Set-AzVmRunCommand的-Parameter和-ProtectedParameter参数都需要传入哈希表数组,每个哈希表对应一个脚本参数,必须包含Name(参数名)和Value(参数值)两个键。
1. 构造普通参数数组
比如要传递serverName和databaseName两个参数:
$scriptParams = @( @{ Name = "serverName"; Value = "xyz" }, @{ Name = "databaseName"; Value = "abc" } )
2. 构造受保护参数数组
受保护参数不会在命令输出或Azure日志中暴露,适合传递敏感信息(如密码):
$protectedScriptParams = @( @{ Name = "adminPassword"; Value = "P@ssw0rd123" } )
3. 完整命令示例
调用本地脚本文件
Set-AzVmRunCommand -ResourceGroupName "你的资源组名" -VMName "你的VM名" -CommandId "RunPowerShellScript" ` -ScriptPath "C:\本地脚本路径\your-script.ps1" ` -Parameter $scriptParams ` -ProtectedParameter $protectedScriptParams
内联脚本示例
如果直接传入脚本内容:
$inlineScript = @" param( [string]$serverName, [string]$databaseName, [string]$adminPassword ) # 这里写你的脚本逻辑 Write-Host "正在连接到服务器: $serverName,数据库: $databaseName" "@ Set-AzVmRunCommand -ResourceGroupName "你的资源组名" -VMName "你的VM名" -CommandId "RunPowerShellScript" ` -ScriptString $inlineScript ` -Parameter $scriptParams ` -ProtectedParameter $protectedScriptParams
常见错误排查
- 不要传入单个哈希表:必须用
@()包裹成数组,即使只有一个参数 - 确保哈希表的键名是
Name和Value(大小写不敏感,但建议和官方文档保持一致) - 脚本中要通过
param()块声明对应的参数,才能接收传递的值
内容的提问来源于stack exchange,提问作者Carv
相关产品推荐
相关产品推荐

