2009-06-18 39 views
44

(No puedo creer que realmente esté preguntando esto, pero me he quedado sin cerebro por el día)¿Dónde colocar los scripts de PowerShell?

Acabo de escribir mi primer script serio de PowerShell, y estoy muy contento con él. Planeo usarlo todos los días más o menos. Quiero poder llamarlo desde la línea de comando Posh. Le daré un nombre de tipo de sustantivo verbo, pero por ahora es un .ps1 simple y no una de esas funciones avanzadas de fantasía que toman params y tal.

Entonces, ¿dónde debería ir y cómo puedo llamarlo desde una línea de comando Posh? ¡Pienso escribir más! ¿A dónde deberían ir?

  • ¿Debería ser una función en mi perfil?
  • ¿Debería seguir mi camino?
  • ¿Va en una PSMODULEPATH? ¿Qué tipo de cosas van allí de todos modos? ¿Se ve de forma recursiva o es simplemente como la RUTA normal?

¿Dónde colocan todos sus scripts de PowerShell y cómo los organizan? Tengo mucha experiencia en la creación de herramientas C# y C++ y sé cómo nombrarlas y dónde ubicarlas. Y en el otro extremo, he hecho muchos archivos .bat de mierda que, por lo general, son independientes o están amontonados en una carpeta. Pero PowerShell parece ser muy diferente. Puede hacer que crappy .bat file escriba cosas rápidamente, o puede crear bibliotecas y servicios sofisticados con él.

Realmente me encantaría algunas ideas sobre cómo debería comenzar a organizar estas cosas antes de comenzar. Obviamente, todo el mundo es diferente, así que espero una discusión. ¡Gracias!

Respuesta

23

Pongo mis scripts personales en la misma carpeta que mi perfil. Luego puedo hacer una copia de seguridad de la versión &. Mi perfil comienza con:

$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path) 
$env:path += ";$ProfileRoot" 
+1

use $ script: MyInvocation.MyCommand.Path, consulte [ruta de origen de un script de ejecución] (http://stackoverflow.com/questions/801967/how-can-i-find-the-source-path-of -an-executing-script/6985381 # 6985381). Obtiene problemas con las llamadas anidadas, incluso con el script de perfil, por ejemplo, tengo una función auxiliar para volver a cargar su perfil (después de ediciones de funciones/variables) pero omito todo el inicio de una vez (como cargar ensamblajes .NET). – yzorg

8

Mis recomendaciones: - Almacene el script en un directorio como lo desee, p. c: \ elegante - Añadir al directorio $ env: ruta

$env:path += ";c:\posh" 

Esto asegura que usted puede estar en otro directorio, dicen c: \ windows, pero se puede llamar al script

[c:\windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter 

Si su Ejemplo.ps1 archivo contiene definiciones de funciones e importa cada vez, entonces me gustaría considerar la adición de esta línea a su archivo de perfil de $

. c:\posh\sample.ps1 

en cuanto a la organización de la escritura .. sólo se veral dirs según el propósito de los scripts :) Personal, dev, externo (descargado), muestras, ...

12

Con V2, puede crear un directorio de módulos en el directorio de WindowsPowerShell donde está su perfil. PS buscará automáticamente en ese directorio cargar módulos cuando ejecute el módulo de importación. Creé un directorio "Scripts" en WindowsPowerShell, que es un directorio hermano de Módulos.

uso mi perfil para establecer algunos directorios usando variables con el siguiente código:

PS> cat $Profile 
$scripts = "$(split-path $profile)\Scripts" 
$modules = "$(split-path $profile)\Modules" 
$docs = $(resolve-path "$Env:userprofile\documents") 
$desktop = $(resolve-path "$Env:userprofile\desktop") 

PS> cat variable:\scripts 
C:\Users\andy.schneider\Documents\WindowsPowerShell\Scripts 

PS> cat variable:\modules 
C:\Users\andy.schneider\Documents\WindowsPowerShell\Modules 
+0

Esto es lo que hago también. Aunque también tengo un directorio "Bibliotecas" con scripts que mi perfil ejecuta automáticamente para definir funciones globales. Lo hice en PowerShell v1, probablemente reemplazaré todo eso con los módulos eventualmente. – JasonMArcher

7

Esto es lo que hago:

nota: sustituir "ModuleName" para algo significativo.

Cree un módulo y guárdelo en la carpeta de módulos globales como "C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ ModuleName \ ModuleName.psm1". por ejemplo:

function global:FancyFunction() { 
    # do something interesting here. 
} 

Export-ModuleMember -function FancyFunction 

Abra su perfil PowerShell y añadir la siguiente línea para asegurarse de que su módulo se carga cada vez que se inicia una sesión de PowerShell:

Import-Module ModuleName -Force 

Puede easiliy encontrar su perfil PowerShell escribiendo :

notepad $profile 

al abrir una nueva sesión de PowerShell, debe ser capaz de llamar a su función desde la consola o desde otras secuencias de comandos sin tener que hacer nada els mi.

Cuestiones relacionadas