Как получить строку вместо массива в PowerShell? - PullRequest
5 голосов
/ 30 сентября 2011

Я пытаюсь сделать следующее:

$files = Get-ChildItem c:\temp | Select-Object Name
foreach ($i in $files) {
    Write-Host "Filename is $i"
}

Пример результата:

Filename is @{Name=oracle10204.rsp}
Filename is @{Name=powershell.txt}

Как получить только следующее?

Filename is oracle10204.rsp
Filename is powershell.txt

Ответы [ 5 ]

5 голосов
/ 30 сентября 2011

Если вы непреклонны в своей первоначальной попытке работать, попробуйте заменить

Select-Object Name

с

Select-Object -ExpandProperty Name
5 голосов
/ 30 сентября 2011

С ключом -Name вы можете получить только имена объектов:

 Get-ChildItem c:\temp -Name
5 голосов
/ 30 сентября 2011

Я не уверен, почему вы используете Select-Object здесь, но я бы просто сделал:

Get-ChildItem c:\temp | % {Write-Host "Filename is $($_.name)"}

Передает выходные данные Get-ChildItem в объект Foreach (сокращение %), который запускает команду для каждого объекта в конвейере.

$_ - универсальная переменная объекта piped.

4 голосов
/ 30 сентября 2011

Вот ответ, чтобы получить только имя из вашего примера. Обведите $ i с помощью $ () и укажите ссылку на свойство .Name. $ () Заставит его вычислить выражение.

$files = Get-ChildItem c:\temp | Select-Object Name
foreach ($i in $files) {
    Write-Host "Filename is $($i.Name)"
}
0 голосов
/ 11 марта 2014

Вы можете получить этот объект в виде строки с параметром Get-ChildItem -Name:

$variable = Get-ChildItem C:\temp -Name

Это дает вам:

System.String
Если вы используете параметр Name, Get-ChildItem возвращает имена объектов в виде строк.

Вы можете прочитать об этом в Get-ChildItem .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...