这是个奇怪的问题。通常在 PowerShell 中执行外部命令时,我会使用 &
运算符,像这样:
& somecommand.exe -p somearguments
然而,今天我发现 .
运算符被这样使用:
.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus
在这种情况下,句号起到什么作用?我不理解。
这是个奇怪的问题。通常在 PowerShell 中执行外部命令时,我会使用 &
运算符,像这样:
& somecommand.exe -p somearguments
然而,今天我发现 .
运算符被这样使用:
.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus
在这种情况下,句号起到什么作用?我不理解。
"." 点运算符 可以从其他已调用的脚本发送和接收变量。"&" 调用运算符 仅能发送变量。
例如,考虑以下内容:
脚本1 (call-operator.ps1):
clear
$funny = "laughing"
$scriptpath = split-path -parent $MyInvocation.MyCommand.Definition
$filename = "laughing.ps1"
"Example 1:" # Call another script. Variables are passed only forward.
& $scriptpath\$filename
"Example 2:" # Call another script. Variables are passed backwards and forwards.
. $scriptpath\$filename
$variableDefinedInOtherScript
脚本2(laughing.ps1):
# This is to test the passing of variables from call-operator.ps1
"I am $funny so hard. Passing variables is so hilarious."
$variableDefinedInOtherScript = "Hello World!"
创建两个脚本,只运行第一个脚本。您将看到“.”点源操作符发送和接收变量。
两者都有其用途,所以要有创意。例如,“&”调用操作符在你想要修改另一个脚本中的变量值而又保留当前脚本中原始值时非常有用。有点类似保险措施。 ;)
简短版:
.
是一种特殊操作符,它可以实现普通操作符无法完成的任务。这个操作符有两种不同的用途。
详细版:
与任何其他语言一样,PowerShell脚本也支持许多不同类型的操作符来帮助操纵值。这些常规操作符包括:
然而,PowerShell还支持称为特殊运算符的东西,用于执行其他类型的运算符无法执行的任务。
这些特殊运算符包括:
@()
数组子表达式运算符&
调用运算符[ ]
强制转换运算符,
逗号运算符.
点引用运算符-f
格式化运算符[ ]
索引运算符|
流水线运算符.
属性解引用运算符..
范围运算符::
静态成员运算符$( )
子表达式运算符.
点引用运算符:在此上下文中,它允许脚本在当前作用域中运行,从而允许任何由脚本创建的函数、别名和变量添加到当前脚本中。
示例:
. c:\scripts.sample.ps1
注意:在这种使用.
特殊运算符的情况下,后面跟着一个空格以区分表示当前目录的符号 (.
)。
示例:
. .\sample.ps1
.
属性解引操作符:通过指示左侧表达式是一个对象,右侧表达式是对象的成员(属性或方法),允许访问跟随.
的对象的属性和方法。
示例:
$myProcess.peakWorkingSet
(get-process PowerShell).kill()
免责声明及来源:
在尝试扩展PowerShell脚本的功能集时,我遇到了同样的问题,并在查找答案时来到了这里。但是,我成功地使用Microsoft开发网络上的精彩写作和IT Pro的进一步扩展来找到了答案。
干杯。
$a = "Get-ChildItem"
. $a # (executes Get-ChildItem in the current scope)
在对象属性中使用句号或分号,例如:
$CompSys.TotalPhysicalMemory
&
是不必要的。省略&
不会对其使用示例产生任何影响。 &
的目的是允许调用命令,其名称是(字符串)表达式的值。通过使用上面的&
,powershell随后(基本上)将后续参数视为字符串,其中第一个参数是&
正式调用的命令名称。如果省略&
,powershell将采用行中的第一项作为要执行的命令。.
是必需的(尽管其他人已经指出,在这种情况下,&
同样有效)。如果没有它,命令行将以变量访问($env:systemdrive
)开头,因此powershell将期望某种形式的表达式。但是,在变量引用之后紧接着的是裸文件路径,这不是一个有效的表达式,会生成错误。通过在行首使用.
(或&
),现在它被视为一个命令(因为开头看起来不像一个有效的表达式),并且参数被处理为可扩展字符串(" "
)。因此,命令行被视为:. "$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd" "install" "notepadplusplus"
$env:systemdrive
,然后.
调用名为的程序。