PowerShell脚本路径问题:跨路径执行Azure策略部署失败
解决Azure策略部署脚本跨目录执行的路径错误问题
错误原因
- 脚本中硬编码的路径未考虑执行目录变化,当从非脚本所在目录运行时,PowerShell会基于当前工作目录解析路径,导致找不到
policy.json文件 - 当
New-AzPolicyDefinition无法定位到指定文件时,会误将路径字符串当作JSON内容解析,从而抛出"Unexpected character encountered while parsing value"的错误
解决方案
使用PowerShell内置变量$PSScriptRoot获取脚本所在的绝对目录,动态拼接策略文件路径,确保无论从哪个目录执行脚本,都能准确定位到目标文件。
修改后的脚本:
$managementGroup = "mg_sandbox" # 获取当前脚本所在的绝对目录 $scriptDirectory = $PSScriptRoot # 安全拼接策略文件的完整路径 $policyFilePath = Join-Path -Path $scriptDirectory -ChildPath "deploy_azure_monitor_agent_extension_for_windows_VMs/policy.json" New-AzPolicyDefinition -Name 'deploy_azure_monitor_agent_extension_for_windows_VMs' -ManagementGroup $managementGroup -Policy $policyFilePath
补充说明
$PSScriptRoot是PowerShell专属自动变量,仅在脚本文件中生效,会返回脚本所在的绝对路径,不受当前执行目录影响Join-Path会自动适配不同环境的路径分隔符(Cloud Shell的Linux环境下会使用/),避免手动拼接路径出现格式错误- 若偏好硬编码绝对路径,需填写完整路径:
/home/sokr/clouddrive/deploy_azure_monitor_agent_extension_for_windows_VMs/policy.json,但这种方式灵活性差,脚本移动后需手动修改路径
内容的提问来源于stack exchange,提问作者SorenDK12
相关产品推荐
相关产品推荐

