2012-09-11 13 views
11

¿Hay alguna forma de leer un archivo de texto C: \ test.txt y recuperar un valor en particular?Powershell recuperando una variable de un archivo de texto

archivo es decir, es el siguiente:

serverName=serv8496 
midasServer=serv8194 

que desea establecer el valor de una variable en mi guión de alguna manera de este archivo, por ejemplo:

$MidasServer= (from file midasServer value) 

no sabré la línea número donde está la referencia.

¿Alguna forma de hacerlo?

Respuesta

15

Sí, leer el archivo, dividir cada línea y asignar el resultado de división para el nombre y valor parámetros:

Get-Content file.txt | Foreach-Object{ 
    $var = $_.Split('=') 
    New-Variable -Name $var[0] -Value $var[1] 
} 
+0

Esto funciona para mí, pero sigo recibiendo un error que dice que el nombre no se pudo crear porque es una cadena vacía. ¿Porqué es eso? – Pred

4

Si eso es exactamente cómo se muestra el archivo es decir, una lista de pares de valores dominantes denotados con una signo igual, entonces debería echar un vistazo a lo que ConvertFrom-StringData

convierte una cadena que contiene uno o más pares de clave y valor en una tabla hash. Debido a que cada par de clave/valor debe estar en una línea separada, las cadenas de texto aquí se usan a menudo como formato de entrada.

lo tanto, si un archivo de texto contiene sólo los datos en su ejemplo que podría hacer esto para crear una tabla hash

$Path = "C:\temp\test.txt" 
$values = Get-Content $Path | Out-String | ConvertFrom-StringData 
$values.midasServer 

Cuando el $values.midasServer tendría el valor serv8194. No es necesario saber dónde están las propiedades con respecto al archivo. Su archivo de entrada también puede tener un espacio inicial y final variable alrededor del signo igual que dará exactamente el mismo resultado.

Dependiendo de su caso de uso que puede dar que un paso más allá y crear un objeto personalizado de esa tabla hash

New-Object -TypeName pscustomobject -Property $values 

Si usted tiene al menos PowerShell versión 3 o superior se puede simplificar el proceso (asumiendo que usted quiere una psobject personalizado)

$values = [pscustomobject](Get-Content $Path -Raw | ConvertFrom-StringData) 
$values.midasServer 
Cuestiones relacionadas