将Selected.System.String转换为System.String

时间:2018-05-11 17:48:00

标签: powershell powershell-v4.0

在Powershell中,我正在调用[io.path] :: GetExtension(..):

...| Select-Object {[io.path]::GetExtension($_)}

我得到以下输出:

[io.path]::GetExtension($_)
---------------------------






.dll                       
.dll                       
.dll                       
.dll                       
.dll                       
.dll                       
.dll                       
.dll                       
.dll                       
.dll

(注意某些输入缺少扩展名,因此输出为空)

对“Get-Member”的管道产生:

   TypeName: Selected.System.String

Name                        MemberType   Definition                                
----                        ----------   ----------                                
Equals                      Method       bool Equals(System.Object obj)            
GetHashCode                 Method       int GetHashCode()                         
GetType                     Method       type GetType()                            
ToString                    Method       string ToString()                         
[io.path]::GetExtension($_) NoteProperty System.String [io.path]::GetExtension($_)=

但是我想要 System.String ,而不是 Selected.System.String,,因为我想要Group-Object,而我(显然)不能将Selected分组。 System.String,因为它没有实现IComparable。

调用“.ToString()”不会抛出错误,但不会将其转换为字符串。

如何生成字符串,或将输出转换为字符串?

2 个答案:

答案 0 :(得分:1)

要将输出打印为字符串,请尝试以下操作:

'C:\x.ini','C:\y.ini' | % { [io.path]::GetExtension($_) } 
  

的.ini

     

的.ini

     

TypeName:System.String

在这种情况下,%或Foreach-Object将为每个输入运行命令,生成所需的输出。 Select-Object实际上会创建一个包含输出的选择对象。打印此对象的内容有很多种方法,但使用Foreach-Object可能是最简单的方法。

答案 1 :(得分:-1)

如果你正在处理字符串,我建议只使用正则表达式:

seek

这将返回$Paths -replace '.*?(\.\w+$)', '$1' 对象,其中包含[System.String[]]

形式的扩展程序