PowerShell
Módulos, Scripts y Funciones.
Buscar..
Introducción
Los módulos de PowerShell brindan extensibilidad al administrador de sistemas, al DBA y al desarrollador. Ya sea simplemente como un método para compartir funciones y scripts.
Las funciones de Powershell son para evitar códigos repetitivos. Consulte [Funciones PS] [1] [1]: Funciones de PowerShell
Los scripts de PowerShell se utilizan para automatizar tareas administrativas que consisten en un shell de línea de comandos y cmdlets asociados construidos sobre .NET Framework.
Función
Una función es un bloque de código con nombre que se utiliza para definir un código reutilizable que debería ser fácil de usar. Normalmente se incluye dentro de un script para ayudar a reutilizar el código (para evitar el código duplicado) o se distribuye como parte de un módulo para que sea útil para otros en múltiples scripts.
Escenarios donde una función podría ser útil:
- Calcula el promedio de un grupo de números.
- Generar un informe para ejecutar procesos.
- Escribir una función que pruebe que una computadora está "en buen estado" haciendo ping a la computadora y accediendo a
c$
-share
Las funciones se crean utilizando la palabra clave de function
, seguida de un nombre de una sola palabra y un bloque de script que contiene el código que se ejecutará cuando se llame el nombre de la función.
function NameOfFunction {
Your code
}
Manifestación
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
Uso:
> HelloWorld
Greetings from PowerShell!
Guión
Una secuencia de comandos es un archivo de texto con la extensión de archivo .ps1
que contiene los comandos de PowerShell que se ejecutarán cuando se llame la secuencia de comandos. Debido a que los scripts son archivos guardados, son fáciles de transferir entre computadoras.
Los guiones se escriben a menudo para resolver un problema específico, ej .:
- Ejecutar una tarea de mantenimiento semanal
- Para instalar y configurar una solución / aplicación en una computadora
Manifestación
MyFirstScript.ps1:
Write-Host "Hello World!"
2+2
Puede ejecutar un script ingresando la ruta al archivo usando un:
- Camino absoluto, ej.
c:\MyFirstScript.ps1
-
.\MyFirstScript.ps1
relativa, por ejemplo,.\MyFirstScript.ps1
si el directorio actual de su consola PowerShell eraC:\
Uso:
> .\MyFirstScript.ps1
Hello World!
4
Un script también puede importar módulos, definir sus propias funciones, etc.
MySecondScript.ps1:
function HelloWorld {
Write-Host "Greetings from PowerShell!"
}
HelloWorld
Write-Host "Let's get started!"
2+2
HelloWorld
Uso:
> .\MySecondScript.ps1
Greetings from PowerShell!
Let's get started!
4
Greetings from PowerShell!
Módulo
Un módulo es una colección de funciones reutilizables relacionadas (o cmdlets) que pueden distribuirse fácilmente a otros usuarios de PowerShell y usarse en múltiples scripts o directamente en la consola. Un módulo generalmente se guarda en su propio directorio y consta de:
- Uno o más archivos de código con la extensión de archivo
.psm1
que contiene funciones o ensamblajes binarios (.dll
) que contienen cmdlets - Un módulo manifest
.psd1
describe el nombre, la versión, el autor, la descripción de los módulos, las funciones / cmdlets que proporciona, etc. - Otros requisitos para que funcione incl. dependencias, scripts etc.
Ejemplos de módulos:
- Un módulo que contiene funciones / cmdlets que realizan estadísticas en un conjunto de datos
- Un módulo para consultar y configurar bases de datos.
Para facilitar a PowerShell encontrar e importar un módulo, a menudo se coloca en una de las ubicaciones de módulos de PowerShell conocidas definidas en $env:PSModulePath
.
Manifestación
Enumere los módulos que están instalados en una de las ubicaciones de módulos conocidas:
Get-Module -ListAvailable
Importar un módulo, ej. Módulo Hyper-V
:
Import-Module Hyper-V
Listar los comandos disponibles en un módulo, ej. el módulo de Microsoft.PowerShell.Archive
> Import-Module Microsoft.PowerShell.Archive
> Get-Command -Module Microsoft.PowerShell.Archive
CommandType Name Version Source
----------- ---- ------- ------
Function Compress-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Function Expand-Archive 1.0.1.0 Microsoft.PowerShell.Archive
Funciones avanzadas
Las funciones avanzadas se comportan de la misma manera que los cmdlets. El ISE de PowerShell incluye dos esqueletos de funciones avanzadas. Acceda a ellos a través del menú, editar, fragmentos de código o con Ctrl + J. (A partir de PS 3.0, las versiones posteriores pueden diferir)
Las cosas clave que incluyen funciones avanzadas son,
-
Get-Help
incorporada y personalizada para la función, accesible a través deGet-Help
- puede usar [CmdletBinding ()] que hace que la función actúe como un cmdlet
- amplias opciones de parámetros
Versión simple:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
#>
function Verb-Noun
{
[CmdletBinding()]
[OutputType([int])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipelineByPropertyName=$true,
Position=0)]
$Param1,
# Param2 help description
[int]
$Param2
)
Begin
{
}
Process
{
}
End
{
}
}
Versión completa:
<#
.Synopsis
Short description
.DESCRIPTION
Long description
.EXAMPLE
Example of how to use this cmdlet
.EXAMPLE
Another example of how to use this cmdlet
.INPUTS
Inputs to this cmdlet (if any)
.OUTPUTS
Output from this cmdlet (if any)
.NOTES
General notes
.COMPONENT
The component this cmdlet belongs to
.ROLE
The role this cmdlet belongs to
.FUNCTIONALITY
The functionality that best describes this cmdlet
#>
function Verb-Noun
{
[CmdletBinding(DefaultParameterSetName='Parameter Set 1',
SupportsShouldProcess=$true,
PositionalBinding=$false,
HelpUri = 'http://www.microsoft.com/',
ConfirmImpact='Medium')]
[OutputType([String])]
Param
(
# Param1 help description
[Parameter(Mandatory=$true,
ValueFromPipeline=$true,
ValueFromPipelineByPropertyName=$true,
ValueFromRemainingArguments=$false,
Position=0,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[ValidateNotNullOrEmpty()]
[ValidateCount(0,5)]
[ValidateSet("sun", "moon", "earth")]
[Alias("p1")]
$Param1,
# Param2 help description
[Parameter(ParameterSetName='Parameter Set 1')]
[AllowNull()]
[AllowEmptyCollection()]
[AllowEmptyString()]
[ValidateScript({$true})]
[ValidateRange(0,5)]
[int]
$Param2,
# Param3 help description
[Parameter(ParameterSetName='Another Parameter Set')]
[ValidatePattern("[a-z]*")]
[ValidateLength(0,15)]
[String]
$Param3
)
Begin
{
}
Process
{
if ($pscmdlet.ShouldProcess("Target", "Operation"))
{
}
}
End
{
}
}