我正在尝试执行以下操作:
$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
答案 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 中阅读相关内容。