将Get-ChildItem与字符串变量一起使用

时间:2019-06-24 21:43:03

标签: powershell powershell-4.0

我正在使用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,并且可以按预期工作。

我可能碰到了一些与我提供的那行无关的小东西,因为我认为这应该起作用。

1 个答案:

答案 0 :(得分:0)

技术人员的评论:

您可以使用invoke表达式“将指定的字符串作为命令求值或运行,并返回表达式或命令的结果。”

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

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