2012-10-05 4 views
5

Tôi đã đọc các phương pháp khác nhau để chuyển đổi mảng char thành chuỗi trong PowerShell, nhưng không có cách nào trong số chúng có vẻ hoạt động với chuỗi của tôi. Nguồn chuỗi của tôi là:PowerShell chuyển đổi Char Array thành chuỗi

$ComputerName = "6WMPSN1" 
$WarrantyURL = "http://www.dell.com/support/troubleshooting/au/en/aulca1/TroubleShooting/ProductSelected/ServiceTag/$ComputerName" 
$WarrantyPage = Invoke-WebRequest -Uri $WarrantyURL 
$WPageText = $WarrantyPage.AllElements | Where-Object {$_.id -eq "TopContainer"} | Select-Object outerText 

Các kết quả WPageText là một Char Mảng vì vậy tôi không thể sử dụng Select-String -Pattern "ngày" -Context

Tôi đã thử:

$WPageText -join 
[string]::Join("", ($WPageText)) 

theo http://softwaresalariman.blogspot.com.au/2007/12/powershell-string-and-char-sort-and.html

Những điều duy nhất tôi đã thành công với cho đến nay là:

$TempFile = New-Item -ItemType File -Path $env:Temp -Name $(Get-Random) 
$WPageText | Out-File -Path $TempFile 
$String = Get-Content -Path $TempFile 

Bất kỳ cách nào để thực hiện việc này ngoài việc viết và đọc tệp?

Trả lời

3

Cách bắn giá rẻ để thực hiện việc này là sửa đổi biến số $ofs và bao quanh mảng trong chuỗi. $ofs là bộ tách PS bên trong để in các mảng sử dụng Object.ToString() từ .NET.

$a = "really cool string" 
$c = $a.ToCharArray() 
$ofs = '' # clear the separator; it is ' ' by default 
"$c" 

Bạn có thể (nên) cũng sử dụng các nhà xây dựng System.String như thế này:

$a = "another mind blowing string" 
$result = New-Object System.String ($a,0,$a.Length) 
+0

++ cho thông tin '$ OFS'; giá trị đề xuất _localizing_ thay đổi '$ OFS', ví dụ:' & {$ OFS = ''; "$ c"} '. Lưu ý rằng mặc dù _effective_ mặc định là một dấu cách duy nhất, _variable_ '$ OFS' là mặc định _không được định nghĩa_. Không chắc chắn những gì bạn đang đề xuất liên quan đến việc xây dựng chuỗi; '$ result = $ a' làm điều tương tự đơn giản hơn nhiều và hiệu quả hơn. – mklement0

0

Dù Are bạn đang tìm kiếm, tôi nghĩ rằng bạn bỏ lỡ một cái gì đó liên quan đến $WPageText. nếu bạn có một cái nhìn, nó là một PSCustomObject bên trong mà bạn quan tâm đến outerText là một chuỗi.

PS C:\PowerShell> $WPageText | Get-Member 

    TypeName: Selected.System.Management.Automation.PSCustomObject 

Name  MemberType Definition                       ----  ---------- ----------            
Equals  Method  bool Equals(System.Object obj)                                
GetHashCode Method  int GetHashCode()                                    
GetType  Method  type GetType()                                    
ToString Method  string ToString()                                    
outerText NoteProperty System.String outerText= ... 

Vì vậy

PS C:\PowerShell> $WPageText.outerText 

Precision M6500 
Service Tag: 6WMPSN1 

Select A Different Product > 
Warranty Information 
Warranty information for this product is not available. 
7

Bạn có thể sử dụng -join điều hành (với các bộ phận phụ để chứng minh kiểu dữ liệu):

$x = "Hello World".ToCharArray(); 
$x.GetType().FullName   # returns System.Char[] 
$x.Length      # 11 as that's the length of the array 
$s = -join $x     # Join all elements of the array 
$s       # Return "Hello World" 
$s.GetType().FullName   # returns System.String 

Ngoài ra, join cũng có thể được viết như sau:

$x -join "" 

Cả hai đều hợp pháp; -join mà không có LHS chỉ hợp nhất mảng trên RHS của nó. Định dạng thứ hai gia nhập LHS bằng cách sử dụng RHS làm dấu phân tách. Xem help about_Join để biết thêm.

+0

+1, nhưng tôi không thấy cần phải gán $ x vào mảng char một cách rõ ràng. Một đơn giản hơn "-join $ x" hoạt động tốt cho tôi. –

+0

Nó có thể là một nôn nao từ các phiên bản trước của Powershell - Tôi thành thật không biết; Tôi chỉ thấy phương pháp này được khuyên ở đâu đó một thời gian. –