2012-09-11 33 views
11

C'è un modo per leggere un file di testo C: \ test.txt e recuperare un valore particolare?PowerShell che recupera una variabile da un file di testo

cioè di file è simile al seguente:

serverName=serv8496 
midasServer=serv8194 

voglio impostare il valore di una variabile nel mio script in qualche modo da questo file ad esempio:

$MidasServer= (from file midasServer value) 

io non so la linea numero in cui si trova il riferimento.

Un modo per farlo?

risposta

15

Sì, leggere il file, dividere ogni riga e assegnare il risultato diviso il nome e il valore dei parametri:

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

Questo funziona per me, ma io continuo a ricevere un errore che dice che nome non potrebbe essere creato, perché è una stringa vuota. Perché? – Pred

4

Se questo è esattamente come il vostro file appare cioè una lista di coppie chiave-valore indicato con una segno di uguale allora si dovrebbe avere uno sguardo a ConvertFrom-StringData che

converte una stringa che contiene una o più coppie di chiavi e di valori in una tabella hash. Poiché ogni coppia chiave/valore deve essere su una riga separata, le stringhe qui vengono spesso utilizzate come formato di input.

Quindi, se un file di testo contiene solo i dati nel tuo esempio si potrebbe fare questo per creare una tabella hash

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

Qualora il $values.midasServer avrebbe il valore di serv8194. Non c'è bisogno di sapere dove sono le proprietà rispetto al file. Il tuo file di input può anche avere uno spazio iniziale e finale variabile attorno al segno di uguale che darà lo stesso risultato.

A seconda del caso d'uso si può prendere che un passo più in là e creare un oggetto personalizzato da quella tabella hash

New-Object -TypeName pscustomobject -Property $values 

Se si dispone di almeno PowerShell v3 o superiore è possibile semplificare il processo (supponendo che si desidera un personalizzato psobject)

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