2012-05-23 21 views
12

Esta es una extraña. Normalmente, cuando ejecuto un comando externo de PowerShell utilizo el operador & así:¿Qué significa el período '.' operador hacer en PowerShell?

& somecommand.exe -p somearguments 

Sin embargo, hoy me encontré con el operador . utilizado como esto:

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

¿Para qué sirve el período ¿en este escenario? No lo entiendo

+0

Su período necesita un espacio después de él o de lo contrario hará "detener por completo las propiedades de un objeto" como se menciona a continuación. – Vippy

Respuesta

6

El punto es un operador de llamada:

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

En su caso, sin embargo, no veo lo que hace.

+5

El término Microsoft acuñado para esto es ["Dot Sourcing"] (http://technet.microsoft.com/en-us/library/ee176949.aspx#ECAA). – Filburt

+4

. o & no hace diferencia para un archivo CMD ya que se ejecuta en un proceso separado (cmd.exe). –

+0

La idea del abastecimiento de puntos de esta manera es cambiar el alcance para que las variables creadas en un script estén disponibles globalmente. Sin embargo, como dijo Keith, las secuencias de comandos de cmd no tienen acceso a ese ámbito de variables de todos modos, así que esto realmente no cambia nada. – Loophole

14

El "" el operador de llamada enviará Y recibirá variables de otros scripts a los que haya llamado. El operador de llamada "&" SÓLO enviará variables.

Por ejemplo, teniendo en cuenta lo siguiente:

Guión 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 

Guión 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!" 

crear tanto guiones y SOLO ejecuta el primero. Verás que el "." el operador de llamada envía y recibe variables.

Ambos tienen sus usos, así que sé creativo. Por ejemplo, el operador de llamada "&" sería útil si quisiera modificar los valores de las variables en otra secuencia de comandos conservando los valores originales en la secuencia de comandos actual. Un poco una salvaguardia. ;)

+0

En pocas palabras, todo se trata de "alcance". Vaya al cuadro de Google y busque "alcance variable de Powershell". – Vippy

3

La corta: Es un operador especial que se utiliza para lograr lo que los operadores normales no pueden alcanzar. Este operador en particular . en realidad tiene dos casos de uso del Operador especial distintivamente diferentes.

The Long:

Al igual que con cualquier otro idioma, secuencias de comandos o de otra manera, script de PowerShell también es compatible con muchos tipos diferentes de operadores para ayudar a manipular los valores.Estos operadores regulares incluyen:

  • aritmética
  • Asignación
  • Comparación
  • lógico
  • redirección
  • elemento de la lista
  • dividir y unir
  • Tipo
  • Unario

Sin embargo, también es compatible con PowerShell qué se conoce como operadores especiales que se utilizan para realizar tareas que no pueden ser realizadas por los otros tipos de operadores.

Estos operadores especiales incluyen:

  • @() operador matriz subexpresión
  • & operador de llamadas
  • [ ] operador de conversión
  • , operador coma
  • . operador de punto de abastecimiento
  • -f Formato operador
  • [ ] operador Índice
  • | operador de canalización
  • . Propiedad operador para deshacer referencias
  • .. operador de rango
  • :: estático operador miembro de
  • $() operador Subexpresiones

.El operador de origen de puntos: se utiliza en este contexto para permitir que un script se ejecute en el ámbito actual permitiendo esencialmente que todas las funciones, alias y variables creadas por el script se agreguen al script actual.

Ejemplo:

. c:\scripts.sample.ps1 

Nota que esta aplicación de la . operador especial es seguido por un espacio para distinguirlo del símbolo (.) que representa el directorio actual

Ejemplo:

. .\sample.ps1 

.Propiedad operador para deshacer referencias: permite el acceso a las propiedades y métodos de un objeto que sigue a la . indicando que la expresión en el lado izquierdo del carácter . es un objeto y la expresión en el lado derecho de la es un miembro de objeto (una propiedad o método).

Ejemplo:

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

Negación & Fuentes:

que tenían la misma pregunta mientras mira a una secuencia de comandos PowerShell que yo estaba tratando de ampliar sus conjuntos de características y aterrizaron aquí cuando haciendo mi investigación para la respuesta. Sin embargo, me las arreglé para encontrar mi respuesta utilizando this magnífica redacción en la Red de Desarrollo de Microsoft complementado con this una mayor expansión de las mismas ideas de IT Pro.

Saludos.