如何在PowerShell的Read-Host中正确输出变量的属性值
PowerShell Read-Host提示文本变量属性展开解决方案
你现有代码存在两处核心问题:
- 变量名前缀错误:PowerShell普通变量赋值以
$开头,你写的@Answer属于错误写法,@符仅用于数组定义、参数splatting等特殊场景,此处需改为$Answer。 - 双引号属性展开规则不匹配:PowerShell双引号默认仅自动展开独立变量名,碰到
.属性访问符时,会将变量名结束后的部分视为普通文本,不会自动计算属性值,所以你之前直接写$VM.Name、或在双引号内加括号的写法都不生效。
方案1:使用子表达式运算符$()包裹属性(最常用)
在双引号内用$()把需要计算的属性表达式包起来,PowerShell会先计算括号内的内容再替换到字符串中:
$Answer = Read-Host -Prompt "Power Off $($VM.Name) yes/no"
方案2:提前拼接提示字符串
先把提示文本拼接完成后再传给Read-Host,避免在双引号内处理属性展开,逻辑更直观:
$promptText = "Power Off " + $VM.Name + " yes/no" $Answer = Read-Host -Prompt $promptText
方案3:使用格式化字符串
用-f格式化运算符替换占位符,适合提示文本复杂、有多个变量需要替换的场景:
$promptText = "Power Off {0} yes/no" -f $VM.Name $Answer = Read-Host -Prompt $promptText
内容的提问来源于stack exchange,提问作者9944990
相关产品推荐
相关产品推荐

