11

我已经阅读了在 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 是一个字符数组,所以我不能使用 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

4 回答 4

16

您可以使用-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 ""

两者都是合法的;-join没有 LHS 只是将数组合并到其 RHS 上。第二种格式使用 RHS 作为分隔符连接 LHS。有关更多信息,请参阅about_Join 帮助

于 2014-02-17T12:59:26.170 回答
7

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

$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)
于 2012-10-05T18:57:40.943 回答
6

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

[String]::new($WPageText)
于 2019-06-07T08:20:39.433 回答
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. 
于 2012-10-06T04:58:45.783 回答