2011-09-30 7 views
5

Próbuję wykonać następujące czynności: wynikJak uzyskać ciąg zamiast tablicy w PowerShell?

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

próbki:

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

Jak mogę dostać tylko po?

Filename is oracle10204.rsp 
Filename is powershell.txt 

Odpowiedz

4

Oto odpowiedź, aby uzyskać nazwę tylko z przykładu. Otaczamy $ i znakiem $() i odwołujemy się do właściwości .Name. Funkcja $() spowoduje, że oceni ona wyrażenie.

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

Nie jestem pewien, dlaczego używasz Select-Object tutaj, ale ja po prostu zrobić:

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

This rur wyjściu Get-ChildItem do foreach-object (skrót %), który uruchamia polecenie dla każdego obiektu w potoku.

$_ to uniwersalna zmienna obiektowo-rurowy.

+0

Dzięki, twój przykład działa, ale jak uzyskać moje oświadczenie foreach, aby podać poprawny wynik? – jrara

+0

@jrara - Mówię, nie używaj swojego oświadczenia foreach, ponieważ jest to to samo, ale o wiele bardziej efektywny sposób. Pipelining jest tym, do czego został zaprojektowany PowerShell. – JNK

+0

No tak, ale staram się nauczyć powershell i chciałbym wiedzieć, co jest nie tak z moją pętlą foreach. Wiem, że jest na to wiele innych sposobów. – jrara

5

Z -name przełączyć można dostać tylko nazwy obiektu:

Get-ChildItem c:\temp -Name 
5

Jeśli jesteś nieugięty o uzyskanie swoją oryginalną próbę pracy, spróbuj wymienić

Select-Object Name 

z

Select-Object -ExpandProperty Name 
0

Możesz dostać ten obiekt jako ciąg z parametrem Get-ChildItem -Name:

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

to daje:

system.string
Jeśli użyć parametru Nazwa, Get-ChildItem zwraca nazwy obiektów jak strun.

Można o tym przeczytać w Get-ChildItem.