为了补充Keith Hill 的有用答案,提供更多信息:
"$computer\admin"
和不带引号的形式 ,都$computer\admin
可以工作,因为不带引号的字符串参数被隐式处理为好像它们被"..."
- 括起来(双引号),即作为执行字符串插值的可扩展字符串(用它们的值替换嵌入的变量引用和表达式),如与不解释其内容的逐字字符串('...'
,单引号)相反。
如有疑问,请"..."
显式使用,尤其是当字符串包含元字符|
时<
有关如何将不带引号的标记解析为命令参数的完整规则,请参阅此答案。
陷阱:
您尝试的部分引用:
'$computer'\admin
即使纠正为"$computer"\admin
使插值工作,也不会起作用,因为 PowerShell - 也许令人惊讶 - 然后将值$computer
和逐字字符串\admin
作为两个参数传递。只有当带有部分引用的复合字符串以未引用的字符串开头时,它才会被识别为单个参数(例如$computer"\admin"
可以工作) - 请参阅此答案以获取更多信息。
另一个值得注意的缺陷是,只有独立的变量引用(例如$computer
和$env:COMPUTERNAME
)才能按原样嵌入"..."
; 要嵌入一个表达式(包括属性访问和索引访问)或命令,您需要将它们包含在$(...)
子表达式运算符中。例如,要嵌入表达式的值$someArray[0]
或$someObj.someProp
可扩展的字符串,您必须使用"$($someArray[0])"
或"$($someObj.someProp)"
- 请参阅此答案以获取完整规则。