Pasando argumentos a una función
Encontré este enlace para crear copias de sombra de VSS en Windows. Pero el código utiliza cadenas fijas para los parámetros:
function createVssSnapshot{
[cmdletbinding()]
param(
[string]$targetVolume="C:\",
[string]$accessPath='C:\vssSnapshot',
[bool]$openSnapshotAfter=$true
)
[..]
Me gustaría modificarlo para que sea más flexible:
function [String]createVssSnapshot{
[cmdletbinding()]
param(
[String]$targetVolume,
[String]$accessPath,
[Bool]$openSnapshotAfter
)
[..]
y llamarlo usando
$result = createVssSnapshot("C:\", "C:\vssSnapshot", $false)
Pero obtengo el siguiente error:
createVssSnapshot : Die Argumenttransformation für den Parameter "targetVolume" kann nicht verarbeitet werden. Der Wert kann nicht in den Typ "System.String" konvertiert werden.
In F:\Powershell_4_Pure\Object_based.ps1:143 Zeichen:28
+ $result = createVssSnapshot("C:\", "C:\vssSnapshot", $false)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [createVssSnapshot], ParameterBindingArgumentTransformationException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,createVssSnapshot
Disculpe por el mensaje de error en alemán, pero parece que targetVolume no es del tipo System.String.
¿Qué me falta aquí?
Para futuras consultas: ¿Cómo puedo modificar PowerShell ISE para tener mensajes de error en inglés?
davy.ai
El mensaje de error indica que el parámetro “targetVolume” no puede ser procesado debido a que el valor no puede ser convertido al tipo “System.String”.
Para solucionar esto, debes eliminar los paréntesis de la llamada a la función y pasar los argumentos directamente como valores separados:
Esto debería asignar correctamente los valores a los parámetros de la función y evitar el problema de conversión de tipos.
Para modificar PowerShell ISE y que muestre mensajes de error en inglés, puedes cambiar la configuración de idioma en la configuración del sistema de Windows. Específicamente, ve a Panel de control > Reloj, idioma y región > Idioma > Preferencias de idioma y establece el inglés como idioma de visualización.