2012-09-11 38 views
11

Có cách nào để đọc tệp văn bản C: \ test.txt và truy xuất một giá trị cụ thể không?Powershell lấy một biến từ một tệp văn bản

tập tin tức trông như thế này:

serverName=serv8496 
midasServer=serv8194 

Tôi muốn thiết lập giá trị của một biến trong kịch bản của tôi trong một cách nào đó từ tập tin này ví dụ:

$MidasServer= (from file midasServer value) 

tôi sẽ không biết dòng số nơi tham chiếu.

Bất kỳ cách nào để thực hiện việc này?

Trả lời

15

Vâng, đọc các tập tin, chia mỗi dòng và gán kết quả chia cho Tên và giá trị các thông số:

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

Điều này làm việc cho tôi, nhưng tôi vẫn gặp lỗi khi nói rằng Tên không thể được tạo vì nó là một chuỗi rỗng. Tại sao vậy? – Pred

4

Nếu điều đó là chính xác cách thức tập tin của bạn xuất hiện tức là một danh sách các cặp giá trị key thể hiện bằng một bằng dấu thì bạn nên có một cái nhìn tại ConvertFrom-StringData

chuyển đổi một chuỗi chứa một hoặc nhiều cặp khóa và giá trị vào bảng băm. Bởi vì mỗi cặp khóa/giá trị phải nằm trên một dòng riêng biệt, các chuỗi tại đây thường được sử dụng làm định dạng đầu vào.

Vì vậy, nếu một file văn bản chứa chỉ các dữ liệu trong ví dụ của bạn, bạn có thể làm điều này để tạo ra một Hashtable

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

Trường hợp $values.midasServer sẽ có serv8194 giá trị. Không cần biết vị trí của thuộc tính đối với tệp. Tệp đầu vào của bạn cũng có thể có không gian hàng đầu và cuối khác nhau xung quanh dấu bằng sẽ cho kết quả chính xác tương tự.

Tùy thuộc vào trường hợp sử dụng của bạn, bạn có thể mất một bước xa hơn và tạo ra một đối tượng tùy chỉnh từ đó Hashtable

New-Object -TypeName pscustomobject -Property $values 

Nếu bạn có ít nhất PowerShell v3 hoặc cao hơn, bạn có thể đơn giản hóa quá trình này (giả sử bạn muốn có một tùy chỉnh psobject)

$values = [pscustomobject](Get-Content $Path -Raw | ConvertFrom-StringData) 
$values.midasServer 
Các vấn đề liên quan