Compruebe la existencia de parámetro en función -- powershell camp Relacionados El problema

Check for existence of parameter in function


25
vote

problema

Español

Tengo una función de la siguiente manera:

  function T {     Param     (         [switch] $IsValueNameRegularExpression     )      .. }   

normalmente para determinar si existe un parámetro, usted hará if ($Param) , solo se vea como este es un [bool]2 , si la función se llama T -IsValueNameRegularExpression:$false devolverá FALSO EN if ($IsValueNameRegularExpression) , a pesar de que existe el parámetro, es decir, la persona que llama especificó un valor en el parámetro opcional.

Si cambio el tipo de parámetro desde [switch] a [bool]66 lo mismo sucederá, obviamente.

En el código para mi función, llamo algunos métodos .NET que contienen una configuración predeterminada para mi [bool]7 ` [Switch] `Parámetros, por lo que a menos que el usuario haya especificado un valor (sea verdadero o Falso) No quiero pasarlo al método .NET.

Podría asignar valores predeterminados al parámetro para que coincidan con los del valor predeterminado del método .NET, pero eso asumiría que el valor predeterminado del método .NET nunca cambia, lo que podría no ser cierto ... < / p>

Entonces, ¿hay una forma más elegante de hacer esto?

Original en ingles

I have a function as follows:

function T {     Param     (         [switch] $IsValueNameRegularExpression     )      .. } 

Normally to determine if a parameter exists you would do if ($Param), only seeing as this is a [switch], if the function is called as T -IsValueNameRegularExpression:$false will return false on if ($IsValueNameRegularExpression), even though the parameter exists - i.e., the caller specified a value to the optional parameter.

If I change the parameter type from [switch] to [bool] the same thing will happen, obviously.

In the code for my function I call some .NET methods which contain a default setting for my [bool]`[switch]` parameters, so unless the user has specified a value (be it true or false) I don't want to pass it to the .NET method.

I could assign default values to the parameter to match those of the default value of the .NET method, but that would be assuming that the default value of the .NET method never changes, which might not be true ...

So, is there a more elegant way of doing this?

  

Lista de respuestas

52
 
vote
vote
La mejor respuesta
 

Uso getItemViewType()9 Para verificar una presencia de parámetros:

  setTag()0  

Salida:

  setTag()1  
 

Use $PSBoundParameters.ContainsKey() in order to check for a parameter presence:

function T {     Param     (         [switch] $IsValueNameRegularExpression     )      $PSBoundParameters.ContainsKey('IsValueNameRegularExpression') }  T T -IsValueNameRegularExpression T -IsValueNameRegularExpression:$false 

Output:

False True True 
 
 
 
 
3
 
vote

Una forma más fácil (y más precisa) es usar la propiedad ISPRESENT. Utilizando aproximadamente el mismo código:

  setTag()2  

produce la siguiente salida:

  setTag()3  

Tenga en cuenta que la unión del interruptor a falso lo hace "no presente"

 

An easier (and more accurate way) is to use the IsPresent property. Using roughly the same code:

function T {     Param (         [switch] $IsValueNameRegularExpression     )     $IsValueNameRegularExpression.IsPresent }  T T -IsValueNameRegularExpression T -IsValueNameRegularExpression:$false 

yields the following output:

False True False 

Note that binding the switch to false makes it "not present"

 
 
 
 
-2
 
vote
  setTag()4  

resultados

  setTag()5  
 
function T  {     Param([switch]$IsValueNameRegularExpression)      $IsValueNameRegularExpression.ToBool() } 

Results

T False  T -IsValueNameRegularExpression True  T -IsValueNameRegularExpression:$true True  T -IsValueNameRegularExpression:$false False 
 
 
 
 

Relacionados problema

85  ¿Qué hay en tu archivo PowerShell `Perfil.PS1`? [cerrado]  ( What s in your powershell profile ps1 file ) 
cerrado . Esta pregunta debe ser más enfocado . Actualmente no está aceptando respuestas. ...

3  ¿Cuál es la diferencia entre el servicio de parada de PowerShell y la parada de red?  ( Whats the difference between powershells stop service and net stop ) 
En PowerShell, he visto múltiples formas de detener un servicio cuanto más moderno <li>5 y cuanto más legado <li>6 The Legacy Way es mucho más ...

1  Backup SharePoint 2010 (usando PowerShell - Backup-SPMARM)  ( Backup sharepoint 2010 using powershell backup spfarm ) 
Le pregunté a esto en Serverfault, pero no obtuve ninguna respuesta, conozco su línea de comandos, pero aún así podrían responderla, ¿alguien aquí tiene algun...

0  Plantilla de brazo azul y módulo PowerShell  ( Azure arm template and powershell module ) 
Tengo un módulo publicado en PowerShell Gallery y quiero implementar este módulo con la plantilla Azure Brazal. ¡Y no encontré cómo! Aquí está mi plantilla:...

3  Compatibilidad entre New-WebServiceProxy y un servidor proxy  ( Compatibility between new webserviceproxy and a proxy server ) 
¿Estoy perdiendo algo aquí? ¿New-WebServiceProxy no es compatible con las credenciales de proxy? Los entornos corporativos usan invariablemente servidores...

16  ¿Cuáles son tus cmdlets favoritos de PowerShell? [cerrado]  ( What are your favorite powershell cmdlets ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...

8  Script PowerShell para descargar el archivo, tener problemas para configurar una conexión segura  ( Powershell script to download file having trouble setting up a secure connectio ) 
Estoy haciendo un script automatizado para leer una lista de un sitio que publica el último código compilado. Esa es la parte que ya he descubierto. La siguie...

1  La tarea de inicio no se ejecuta en el rol de servicio de la nube de Azure  ( Startup task not running on azure cloud service role ) 
Tengo dificultades para tratar de configurar una tarea de inicio en un papel de Azure. El objetivo final es deshabilitar el cifrado RC4, junto con otras confi...

0  PowerShell: ajuste de valores de una matriz filtrada  ( Powershell setting values of a filtered array ) 
Quiero leer en un archivo CSV, filtrarlo en función de los valores de dos de Los campos y establecen el valor de otro campo. Aquí hay un ejemplo simple de lo ...

43  ¿Hay un formato de código de PowerShell / bonita impresora? [cerrado]  ( Is there a powershell code formatter pretty printer ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos