8
$computer = gc env:computername

# Argument /RU '$computer'\admin isn't working.
SchTasks /create /SC Daily /tn "Image Verification" /ST 18:00:00 /TR C:\bdr\ImageVerification\ImageVerification.exe /RU '$computer'\admin /RP password

基本上我需要在计划任务中提供计算机名称...

先感谢您!

4

2 回答 2

13

单引号字符串不会扩展 PowerShell 中的变量。尝试使用双引号字符串,例如:

"$computer\admin"
于 2012-09-12T18:14:27.937 回答
0

为了补充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)"- 请参阅此答案以获取完整规则。

于 2021-11-19T21:54:52.377 回答