【问题标题】:Using a Variable (PowerShell) inside of a command在命令中使用变量 (PowerShell)
【发布时间】:2012-09-05 19:36:43
【问题描述】:
$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

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

提前谢谢你!

【问题讨论】:

  • 变量不会插入到带有单引号的字符串中。请改用双引号。

标签: powershell variables string-interpolation quoting


【解决方案1】:

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

"$computer\admin"

【讨论】:

  • 或者在这种情况下根本没有引号。无论如何,PowerShell 都会自动处理引用。
  • 是的,这就是我通常会做的。只是想指出单引号和双引号字符串之间的区别。 :-)
  • 我得到一个错误:错误:登录失败:未知的用户名或密码......但我知道用户存在任何想法?我这样做对吗?
  • 如果您使用 /RU,用户名似乎需要类似于“NT AUTHORITY\LocalService”。也许您不想使用“运行方式”帐户而只使用 /U 和 /P?此外,根据使用情况,时间规格应仅为 18:00。
【解决方案2】:

用其他信息补充Keith Hill's helpful answer

"$computer\admin"未引用 形式 $computer\admin 都可以使用,因为未引用的字符串参数被隐式视为它们被"..."-enclosed引用),即作为expandable strings执行字符串插值(用它们的值替换嵌入的变量引用和表达式),而不是 verbatim strings'...'-引用)解释他们的内容。

如有疑问,请明确使用"...",尤其是当字符串包含元字符(例如|<)时

有关如何将 未引用 标记解析为命令参数的完整规则,请参阅this answer

陷阱

您尝试的部分引用

'$computer'\admin

即使更正为 "$computer"\admin 以使插值工作,不会工作,因为 PowerShell - 也许令人惊讶 - 然后传递值$computer 和逐字字符串 \admin 作为两个参数只有当带有部分引用的复合字符串以未引用的字符串开头时,它才会被识别为单个参数(例如$computer"\admin"会起作用)-请参阅this answer 了解更多信息。

另一个值得注意的缺陷是只有独立变量引用,如$computer$env:COMPUTERNAME 可以按原样嵌入"...";要嵌入一个表达式——包括属性访问和索引访问——命令,您需要将它们包含在$(...)subexpression operator。例如,要将表达式 $someArray[0]$someObj.someProp 的值嵌入到可扩展字符串中,您必须使用 "$($someArray[0])""$($someObj.someProp)" - 有关完整规则,请参阅 this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2018-05-28
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多