2012-10-05 39 views
5

char配列をPowerShellの文字列に変換するためのさまざまなメソッドを読んだことがありますが、それらの文字列はいずれも文字列で動作しないようです。 私の文字列のソースである:PowerShellはChar配列を文字列に変換します

$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 

私は私が試した

-contextを選択し、文字列-pattern「日」を使用することはできませんので、その結果WPageTextはchar配列でありますhttp://softwaresalariman.blogspot.com.au/2007/12/powershell-string-and-char-sort-and.html

私がこれまでに成功している唯一のもの があるあたりとして

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

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

ファイルの書き込みと読み取りを除いて、これを行う方法はありますか?

答えて

3

$ofs変数を変更し、配列を文字列で囲むことで安価に実現できます。 $ofsは、.NETからObject.ToString()を使用して配列を印刷するための内部PSセパレータです。あなたも、このようなSystem.Stringコンストラクタを使用します(必要がある)ことができます

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

:あなたが探しているものは何でも

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

++は '$ OFS'の情報です; '$ OFS 'の変更を提案する価値があります。例えば、'&{$ OFS =' '; "$ c"} '。 _effective_defaultが単一のスペースであっても、_variable_ '$ OFS'はデフォルトでは定義されていません。あなたが文字列コンストラクタに関して推薦しているものがわからない。 '$ result = $ a'は同じことをはるかに単純で効率的に行います。 – mklement0

0

を、私はあなたが$WPageTextに関する何かを見逃していると思います。あなたが見ている場合はに興味のあるPSCustomObjectの文字列です。

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

だから、あなたは(データ型を証明するために、余分な部分を持つ)-join演算子を使用することができます

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

:参加、また

$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 

としても書くことができます

$x -join "" 

どちらも合法です。 LHSなしの-joinは、そのRHS上で配列をマージするだけです。 2番目の形式では、RHSを区切り文字として使用してLHSに結合されます。詳細はhelp about_Joinを参照してください。

+0

+1ですが、$ xをchar配列に明示的にキャストする必要はありません。はるかに単純な "-join $ x"がうまく動作します。 –

+0

Powershellの以前のバージョンから二日酔いかもしれません - 私は正直に分かりません。私はちょうど時間の後ろにこの方法がアドバイスされたのを見た。 –

関連する問題