等运算符的初学者问题

时间:2016-01-26 18:08:17

标签: powershell

每个人都试图继续学习Powershell,我坚持这个问题。我似乎找不到这个代码在 = true部分接受的等于运算符。 我试过-eq,=,==和===。 如果此Test-path命令返回true条件,则尝试弹出Msg框。

$wshell = New-Object -ComObject Wscript.Shell

If( Test-Path 'C:\wmw\~$test.xlsx' **= True)**
{
     $wshell.Popup("Hey $Env:ComputerName This file is in use!",0,"test")}
else

{$wshell.Popup("Hey $Env:ComputerName This file is not in use!",0,"test")}

1 个答案:

答案 0 :(得分:6)

首先,PowerShell中true的文字是$true。并且比较运算符是-eq。然后问题是cmdlet的参数以-开头,您需要将命令括在括号中。否则-eq将被解释为Test-Path的(不存在的)参数。所以把它们放在一起:

If( (Test-Path 'C:\wmw\~$test.xlsx') -eq $True) { ... }

或者,因为if只需要一个可以强制转换为布尔值的值,所以在大多数情况下甚至不需要显式比较:

if (Test-Path 'C:\wmw\~$test.xlsx') { ... }

未来探索shell的一个提示:阅读错误消息。大多数时候他们都很有帮助。

省略括号并使用-eq告诉您它被解释为参数的事实:

  

测试路径:找不到与参数名称匹配的参数' eq'。

=相同,在此处被解释为参数 value

  

测试路径:找不到接受参数' ='的位置参数。

正确地使用括号并使用-eq打破解析器,诚然:

  

您必须在' -eq'之后提供值表达式。运营商。
  意外的令牌' True'在表达或陈述中   缺少关闭')'表达后如果'声明。
  意想不到的令牌')'在表达或陈述中。

使用括号和=再次有用:

  

赋值表达式无效。赋值运算符的输入必须是能够接受赋值的对象,例如变量或属性。