Вопрос по – Что значит период "." оператор делает в powershell?

20

Это странно. Обычно, когда я выполняю внешнюю команду из powershell, я использую& Оператор, как это:

& somecommand.exe -p somearguments

Однако сегодня я наткнулся на. оператор использовал вот так:

.$env:systemdrive\chocolatey\chocolateyinstall\chocolatey.cmd install notepadplusplus

Какой цели служит период в этом сценарии? Я не понимаю.

Вашему периоду нужен пробел после него, иначе он будет "полностью останавливаться для свойств объектов". как упомянуто ниже. Vippy

Ваш Ответ

4   ответа
6

Точка является оператором вызова:

$a = "Get-ChildItem" 
. $a # (executes Get-ChildItem in the current scope)

Однако в вашем случае я не вижу, что он делает.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededabout_ScopesError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded"Dot Sourcing".
Error: User Rate Limit Exceeded
7

The Short: Это специальный оператор, используемый для достижения того, чего не могут достичь обычные операторы. Этот конкретный оператор. на самом деле есть два совершенно разных варианта использования специального оператора.

The Long:

Как и с любым другим языком, сценариями или иным образом, сценарий PowerShell также поддерживает множество различных типов операторов, помогающих манипулировать значениями. Эти регулярные операторы включают в себя:

  • Arithmetic
  • Assignment
  • Comparison
  • Logical
  • Redirection
  • List item
  • Split and Join
  • Type
  • Unary

Тем не менее, PowerShell также поддерживает то, что известно какSpecial Operators которые используются для выполнения задач, которые не могут быть выполнены другими типами операторов.

ЭтиSpecial Operators Включают:

  • @() Array subexpression operator
  • & Call operator
  • [ ] Cast operator
  • , Comma operator
  • . Dot sourcing operator
  • -f Format operator
  • [ ] Index operator
  • | Pipeline operator
  • . Property dereference operator
  • .. Range operator
  • :: Static member operator
  • $( ) Subexpression operator

. Dot sourcing operator: используется в этом контексте, чтобы позволить сценарию запускаться в текущей области действия, по существу позволяя добавлять любые функции, псевдонимы и переменные, которые были созданы сценарием, к текущему сценарию.

Example:

. c:\scripts.sample.ps1 

NoteЧто это приложение. Специальный оператор сопровождается пробелом, чтобы отличить его от (.) символ, который представляет текущий каталог

Example:

. .\sample.ps1

. Property dereference operator: Предоставляет доступ к свойствам и методам объекта, который следует за. указав, что выражение на левой стороне. символ - это объект, а выражение справа от него - член объекта (свойство или метод).

Example:

$myProcess.peakWorkingSet  
(get-process PowerShell).kill()

Disclaimer & Sources:

У меня возник тот же вопрос, когда я смотрел на скрипт PowerShell, который я пытался расширить в его наборах функций, и попал сюда, когда проводил исследование для ответа. Однако мне удалось найти свой ответ, используяэтот великолепная запись в сети разработчиков Microsoft, дополненнаяэтот дальнейшее расширение тех же идей от IT Pro.

Приветствия.

1

Период или .full stop для свойств объекта; лайк

$CompSys.TotalPhysicalMemory

Посмотреть здесь:http://www.computerperformance.co.uk/powershell/powershell_syntax.htm#Operators_

23

& Quot;. & Quot; оператор call отправит и получит переменные из других вызванных вами скриптов. & Amp; & quot; оператор вызова будет отправлять только переменные.

Например, учитывая следующее:

Скрипт 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 (смеется.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!"

Создайте оба сценария и запустите ТОЛЬКО первый. Вы увидите, что "." оператор вызова отправляет и получает переменные.

Оба имеют свое применение, так что будьте изобретательны. Например, & amp; & quot; Оператор вызова был бы полезен, если вы хотите изменить значение (я) переменных в другом скрипте, сохранив исходные значения в текущем скрипте. Какая-то гарантия. ;)

Error: User Rate Limit Exceeded

Похожие вопросы