【发布时间】:2019-11-06 17:12:38
【问题描述】:
我正在使用 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,它按预期工作。
我可能触及了一些与我提供的线路无关的小东西,因为我认为这应该可以工作..
【问题讨论】:
-
您有一个描述代码的字符串,而不是实际代码,因此您无法按原样运行它。您可以使用
Invoke-Expression让 PowerShell 将其作为代码读取。类似Invoke-Expression "Get-ChildItem 'C:\Users\USER\' -recurse $search_param" -
@TheMadTechnician 谢谢!这似乎奏效了。但我的印象是变量 $search_param 会被扩展。为什么 -recurse $search_param 不起作用?
-
好吧,一方面,你有
'$search_param'在单引号中,所以它不会扩展字符串。在双引号中它会(即"$search_param"),但它仍然只是一个字符串,而不是实际的脚本。即使扩展字符串,我认为它也不会像您期望的那样。 -
谢谢!我将进一步研究字符串行为.. 我只是不知道如何评估改变查询结构的用户输入..
-
是的。我认为完成您正在尝试的最佳方法可能是重新考虑您如何构建和使用
$search_param。