PowerShell将Char Array转换为字符串

时间:2012-10-05 00:59:02

标签: powershell-v3.0

我已经阅读了在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

生成的WPageText是Char数组,所以我不能使用Select-String -Pattern“days”-Context

我试过了:

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

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

到目前为止,我唯一成功的事情是:

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

除了编写和阅读文件外,还有什么方法可以做到这一点吗?

4 个答案:

答案 0 :(得分:8)

您可以使用-join运算符(使用额外部分来证明数据类型):

$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上合并数组。第二种格式使用RHS作为分隔符加入LHS。有关详情,请参阅help about_Join

答案 1 :(得分:4)

这样做的廉价方法是修改$ofs变量并将数组包含在字符串中。 $ofs是一个内部PS分隔符,用于使用.NET中的Object.ToString()打印数组。

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

您也可以(应该)使用System.String这样的构造函数:

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

答案 2 :(得分:2)

将char数组转换为字符串的最快方法:

[String]::new($WPageText)

答案 3 :(得分:0)

无论你在寻找什么,我认为你错过了关于$WPageText的一些事情。如果您看一下PSCustomObject,您感兴趣的是outerText这是一个字符串。

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

所以

PS C:\PowerShell> $WPageText.outerText 

 Precision M6500 
Service Tag: 6WMPSN1 

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