2012-10-05 17 views
5

Ich habe verschiedene Methoden zum Konvertieren eines Char-Array in eine Zeichenfolge in PowerShell gelesen, aber keiner von ihnen scheint mit meiner Zeichenfolge zu arbeiten. Die Quelle meiner Zeichenfolge ist:PowerShell Char Charray in String konvertieren

$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 

Das resultierende WPageText ein Char-Array ist, damit ich nicht Select-String -Pattern "Tage" -Kontext

Ich habe versucht, verwenden können:

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

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

Das einzige, was ich mit so erfolgreich waren weit ist:

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

Jeder Weg, dies neben dem Schreiben und Lesen einer Datei zu tun?

Antwort

3

Der billige Schuss Weg dies zu tun ist, indem Sie die $ofs Variable ändern und das Array in eine Zeichenfolge einschließen. $ofs ist ein interner PS-Separator zum Drucken von Arrays mit Object.ToString() von .NET.

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

Sie können (sollten) auch die System.String Konstruktor wie folgt verwenden:

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

++ für die '$ OFS'-Info; Empfehlenswert _localizing_ die '$ OFS'-Änderung, z.B .:' & {$ OFS = ''; "$ c"} '. Beachten Sie, dass, obwohl der _effective_-Standardwert ein einzelnes Leerzeichen ist, die _variable_ '$ OFS' standardmäßig _nicht definiert_ ist. Nicht sicher, was Sie bezüglich des Zeichenfolgenkonstruktors empfehlen; '$ result = $ a' macht dasselbe viel einfacher und effizienter. – mklement0

0

Was auch immer für Ihre suchen, denke ich, dass Sie etwas über $WPageText verpassen. Wenn Sie einen Blick haben, ist es ein PSCustomObject in dem Sie interessiert sind outerText, die eine Zeichenfolge ist.

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= ... 

So

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

Sie können den -join Operator (mit Zusatzteilen Datentypen beweisen):

:

$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 

Alternativ kann die Verknüpfung auch geschrieben werden

$x -join "" 

Beide sind legal; -join ohne eine LHS verbindet nur das Array auf seiner RHS. Das zweite Format verbindet die LHS mit dem RHS als Trennzeichen. Siehe help about_Join für mehr.

+0

+1, aber ich sehe keine explizite Umwandlung von $ x in ein char-Array. Ein viel einfacheres "-join $ x" funktioniert gut für mich. –

+0

Es könnte ein Kater von früheren Versionen von Powershell sein - ich weiß es ehrlich gesagt nicht; Ich habe diese Methode vor einiger Zeit irgendwo gesehen. –