这个时期是什么'.' 运营商在powershell做什么?

Mic*_*cah 26 syntax powershell operators

这很奇怪.通常当我从powershell执行外部命令时,我使用这样的&运算符:

& somecommand.exe -p somearguments
Run Code Online (Sandbox Code Playgroud)

但是,今天我遇到了这样.使用的运算符:

.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus
Run Code Online (Sandbox Code Playgroud)

在这种情况下,这个时期的目的是什么?我不明白.

Vip*_*ppy 27

"." call operator将从你调用的其他脚本发送和接收变量."&"调用操作符只能发送变量.

例如,考虑以下因素:

脚本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
Run Code Online (Sandbox Code Playgroud)

脚本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!"
Run Code Online (Sandbox Code Playgroud)

创建两个脚本,只运行第一个脚本.你会看到"." call运算符发送和接收变量.

两者都有它们的用途,所以要有创意.例如,如果要在保留当前脚本中的原始值的同时修改另一个脚本中的变量值,则"&"调用运算符将​​非常有用.有点保障.;)


小智 11

简短: 它是一个特殊的操作员,用于实现常规操作员无法实现的目标.这个特殊的操作员.实际上有两个截然不同的特殊操作员用例.

龙:

与任何其他语言,脚本或其他方式,PowerShell脚本还支持许多不同类型的运营商,以帮助操作值.这些常规运营商包括:

  • 算术
  • 分配
  • 对照
  • 合乎逻辑
  • 重定向
  • 项目清单
  • 拆分和加入
  • 类型
  • 一元

但是,PowerShell还支持称为特殊运算符的特性,这些特殊运算符用于执行其他类型的运算符无法执行的任务.

这些特别经营者包括:

  • @() 数组子表达式运算符
  • & 呼叫运营商
  • [ ] 演员
  • , 逗号运算符
  • . 点采购运营商
  • -f 格式运算符
  • [ ] 指数运营商
  • | 管道运营商
  • . 属性解除引用运算符
  • .. 范围运算符
  • :: 静态成员运算符
  • $( ) Subexpression运算符

. 点源操作符:在此上下文中用于允许脚本在当前作用域中运行,基本上允许将脚本创建的任何函数,别名和变量添加到当前脚本中.

例:

. c:\scripts.sample.ps1 
Run Code Online (Sandbox Code Playgroud)

请注意,.特殊操作符的此应用程序后跟一个空格,以区别于.表示当前目录的()符号

例:

. .\sample.ps1
Run Code Online (Sandbox Code Playgroud)

. 属性解引用运算符:允许访问对象的属性和方法,该对象跟随.指示.字符左侧的表达式是对象,而右侧的表达式是对象成员(属性或属性)方法).

例:

$myProcess.peakWorkingSet  
(get-process PowerShell).kill()
Run Code Online (Sandbox Code Playgroud)

免责声明及来源:

我在查看PowerShell脚本时遇到了同样的问题,我试图在其功能集上进行扩展,并在进行研究时找到答案.但是我设法找到使用我的回答这个宏伟写了微软发展网络上辅以这种从IT专业人士同样的想法进一步扩大.

干杯.


Dav*_*ant 6

点是呼叫运营商:

$a = "Get-ChildItem" 
. $a # (executes Get-ChildItem in the current scope)
Run Code Online (Sandbox Code Playgroud)

但是,在你的情况下,我不知道它做了什么.

  • 微软为此创造的术语是["Dot Sourcing"](http://technet.microsoft.com/en-us/library/ee176949.aspx#ECAA). (6认同)
  • .或者&对CMD文件没有区别,因为它在一个单独的进程(cmd.exe)中执行. (4认同)