如何在PowerShell中获取字符串而不是数组?

时间:2011-09-30 12:42:58

标签: powershell powershell-v2.0

我正在尝试执行以下操作:

$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 个答案:

答案 0 :(得分:5)

我不确定你为什么在这里使用Select-Object,但我会这样做:

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

这将Get-ChildItem的输出传递给Foreach-Object(缩写%),它为管道中的每个对象运行命令。

$_是通用的管道对象变量。

答案 1 :(得分:5)

使用-Name开关,您只能获取对象名称:

 Get-ChildItem c:\temp -Name

答案 2 :(得分:5)

如果您坚持要让原始尝试工作,请尝试替换

Select-Object Name

Select-Object -ExpandProperty Name

答案 3 :(得分:4)

以下是从示例中获取名称的答案。使用$()包围$ i并引用.Name属性。 $()将使它评估表达式。

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

答案 4 :(得分:0)

您可以将此对象作为包含Get-ChildItem -Name参数的字符串:

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

这会给你一个:

  

System.String
  如果使用Name参数,则Get-ChildItem将对象名称返回为字符串。

您可以在 Get-ChildItem 中阅读相关内容。