这是一个奇怪的问题。通常,当我从 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
在这种情况下,时间段的用途是什么?我不明白。
这 ”。” dot sourcing 运算符将发送和接收来自您调用的其他脚本的变量。“&”调用运算符将只发送变量。
例如,考虑以下情况:
脚本 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)
但是,在您的情况下,我看不到它的作用。
.Period 或 .full stop 用于对象属性;喜欢
$CompSys.TotalPhysicalMemory
见这里: http: //www.computerperformance.co.uk/powershell/powershell_syntax.htm#Operators_
这个答案是对 David Brabant 和他的评论者已经提供的答案稍加扩展。虽然这些言论都是真实和中肯的,但有些东西被遗漏了。
&
调用外部命令时使用的 OP是不必要的。省略 the&
不会有任何影响(以他的用法为例)。的目的&
是允许调用名称为(字符串)表达式的值的命令。通过使用&
上述内容,powershell 然后(基本上)将后续参数视为字符串,其中第一个是&
适当调用的命令名称。如果&
省略了,powershell 会将行中的第一项作为要执行的命令。
但是,.
第二个示例中的是必要的(尽管正如其他人所指出的,&
在这种情况下也可以正常工作)。没有它,命令行将以变量 access ( $env:systemdrive
) 开头,因此 powershell 会期望某种形式的表达式。但是,紧随变量引用的是一个裸文件路径,它不是有效的表达式,会产生错误。通过在行首使用.
(或&
),它现在被视为一个命令(因为开头看起来不像一个有效的表达式)并且参数被处理为可扩展字符串(" "
)。因此,命令行被视为
. "$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd" "install" "notepadplusplus"
第一个参数已$env:systemdrive
代入其中,然后.
调用由此命名的程序。
注意:关于 powershell 如何处理命令行参数的完整描述比这里给出的要复杂得多。这个版本被缩减为回答问题所需的基本部分。查看about_Parsing以获得全面的描述。它不完整,但应该涵盖大多数正常使用。在 stackoverflow 和 github(powershell 现在所在的位置)上还有其他帖子,涵盖了官方文档中未列出的一些看似古怪的行为。另一个有用的资源是about_Operators,虽然这还不是很完整。一个例子是.
,&
当调用除 powershell 脚本/cmdlet 之外的其他东西时,根本没有提及。