tutorial - ¿Dónde colocar los scripts de PowerShell?
powershell tutorial (4)
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
(No puedo creer que en realidad estoy preguntando esto, pero estoy fuera de mi capacidad intelectual por el día).
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 lo llamo 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!
Esto es lo que hago:
nota: sustituya "ModuleName" por 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". p.ej:
function global:FancyFunction() {
# do something interesting here.
}
Export-ModuleMember -function FancyFunction
Abra su perfil de PowerShell y agregue la siguiente línea para asegurarse de que su módulo esté cargado cada vez que inicie una sesión de PowerShell:
Import-Module ModuleName -Force
Puedes encontrar fácilmente tu perfil de Powershell escribiendo:
notepad $profile
Cuando abre una nueva sesión de PowerShell, debe poder llamar a su función desde la consola o desde otras secuencias de comandos sin tener que hacer nada más.
Mis recomendaciones: - Almacene la secuencia de comandos en un directorio como lo desee, por ejemplo, c: / posh - Agregue el directorio a $ env: ruta
$env:path += ";c:/posh"
Esto garantiza que puede estar en otro directorio, digamos c: / windows, pero puede llamar al script
[c:/windows] > sampl[TAB] # it expands the name of file to sample.ps1, then hit enter
Si su archivo sample.ps1 contiene definiciones de funciones y las importa cada vez, entonces consideraría agregar esta línea a su archivo de perfil $
. c:/posh/sample.ps1
Acerca de la organización de guiones ... solo varios directorios según el propósito de los guiones :) Personal, dev, externo (descargado), muestras, ...
Puse mis scripts personales en la misma carpeta que mi perfil. Luego puedo hacer una copia de seguridad y versionarlos juntos. Mi perfil comienza con:
$ProfileRoot = (Split-Path -Parent $MyInvocation.MyCommand.Path)
$env:path += ";$ProfileRoot"