如何在foreach中使用字符串值?
以下作品。
$printString='$_.name+","+$_.name'
Get-ChildItem|foreach {$_.name+','+$_.name}
但以下内容不起作用
Get-ChildItem|foreach {$printString}
但是我需要它才能工作:因为我有一个任务来打印表中的每一列,我可以使用表字典来获取所有列,所以都是动态的,然后当我尝试打印结果时,我也可以使用上面的字符串来打印结果。任何解决方案
答案 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}}