Преобразовать Selected.System.String в System.String - PullRequest
0 голосов
/ 11 мая 2018

В 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. Строка, поскольку она не реализует IComparable.

Вызов ".ToString ()" не выдает ошибку, но не преобразует ее в строку.

Как я могу создать строку или преобразовать вывод в строку?

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Если вы имеете дело со строками, я бы предложил просто использовать регулярное выражение:

$Paths -replace '.*?(\.\w+$)', '$1'

Это вернет вам [System.String[]] объект с расширениями в виде .exe

0 голосов
/ 11 мая 2018

Чтобы распечатать выходные данные в виде строк, попробуйте это:

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

.ini

.ini

TypeName: System.String

В этом случае% или Foreach-Object будут запускать команду для каждого ввода, генерируя необходимый вывод. Select-Object фактически создаст объект выбора, который содержит выходные данные. Существует много способов напечатать содержимое этого объекта, но использование Foreach-Object, вероятно, является самым простым.

...