如何在foreach中使用字符串值?

时间:2011-03-04 06:33:51

标签: powershell

如何在foreach中使用字符串值?

以下作品。

$printString='$_.name+","+$_.name'
Get-ChildItem|foreach {$_.name+','+$_.name}

但以下内容不起作用

Get-ChildItem|foreach {$printString}

但是我需要它才能工作:因为我有一个任务来打印表中的每一列,我可以使用表字典来获取所有列,所以都是动态的,然后当我尝试打印结果时,我也可以使用上面的字符串来打印结果。任何解决方案

4 个答案:

答案 0 :(得分:5)

有几种解决方案。我中间出现的一些是:

$printString='$($_.name),$($_.name)'
Get-ChildItem | % { $ExecutionContext.InvokeCommand.ExpandString($printString) }

$formatString='{0},{0}'
Get-ChildItem | % { $formatString -f $_.Name }

$s = {param($file) $file.Name + "," + $file.Name }
Get-ChildItem | % { & $s $_ }

第一个扩展字符串,这可能是你想要的。请注意,组合变量必须包含在$(..)中。第二个只是格式化一些输入。第三个使用scriptblock,你可以创建你想要的任何字符串(最强大的)

答案 1 :(得分:2)

一种可能的解决方案:

 $printString={$_.name+","+$_.name}
 Get-ChildItem |foreach {.$printString}

答案 2 :(得分:2)

另一种可能的解决方案:

$printString='$_.name+","+$_.name'
Get-ChildItem|foreach { Invoke-Expression $printString }

答案 3 :(得分:0)

有趣的可能性:

dir | select @{Name='Name'; Expression={$_.Name, $_.Name}}