首页 > 解决方案 > 将 Get-ChildItem 与字符串变量一起使用

问题描述

我正在使用 Get-ChildItem 来保存与用户输入参数匹配的文件位置。我似乎无法弄清楚(我是 powershell 新手)如何将字符串变量与 cmdlet 一起使用。

我将在下面的脚本中定义 $search_param。

我已经尝试在 powershell ise 上使用内置调试器,如果有的话,它会让我更加困惑。

在这里,我发现用 $search_param 的实际值替换 '$search_param' 会产生 csv 输出,但使用 '$search_param' 不会产生任何输出。一些有用的信息可能是我用双引号定义了 $search_param。

导致所有问题的行是:

Get-ChildItem 'C:\Users\USER\' -recurse '$search_param'

$search_param 定义为:

| where { $_.name -like "*peanut*" -or $_.name -like "*butter*" -or $_.name -like "*test*"} 
| where { $_.extension -in ".txt",".csv",".docx" } 
| where { $_.CreationTime -ge "08/07/1998" -and $_.CreationTime -le "08/07/2019" } 
| select FullName | Export-Csv -Path .\SearchResults.csv -NoTypeInformation

有趣的是,在我去吃午饭之前,我已经完成了所有工作,然后又回到了一个不同的故事中……

我在我的另一段脚本中使用 Export-csv 并且按预期工作。

我可能触及了一些与我提供的线路无关的小东西,因为我认为这应该可以工作..

标签: powershellpowershell-4.0

解决方案


根据技术员的评论:

您可以使用调用表达式来“评估或运行指定的字符串作为命令并返回表达式或命令的结果”。

Invoke-Expression "Get-ChildItem 'C:\Users\SGouldin\' -recurse $search_param"

从一些研究来看,依赖调用表达式并不总是最佳实践。就我而言,我需要它是因为我尝试处理用户输入的方式(一些 weeeeird 字符串连接/连接)。


推荐阅读