通过字符串数组的 Powershell v2 动态命令

Powershell v2 dynamic command through string arrays

我正在尝试构建一个小型 GUI 工具来权衡映射网络驱动器上的文件夹和文件大小。 UI 已预设 checkboxes/radiobuttons 在要执行的最终脚本中添加或删除管道

'run'按钮执行变量$fullquery

$fullQuery = $querycmd + $querypath + $setrecurse + $query + $querysuffix

这应该会产生最终的字符串;

gci g:\foo\bar\ -recurse | where-object {$_.Extension -eq ".psd"} | select -property name, length

每个部分都存储在下面的变量中,主 $fullQuery 变量将它们连接成一个字符串来执行;

$querycommand # 这是; gci

$querypath # 这是一组串联的字符串变量

$setrecurse # 添加(或不添加)-recurse 标志

$query # 是查询内容所在的数组; where-object 命令(主要是扩展), 每个 UI 元素在字符串中都有自己的代码 "| where-object {$_.Extension -eq ".psd"} " 启用复选框会将该字符串添加到 $query 数组中。

$querysuffix # 过滤器以管道格式返回 file/folder 大小和名称以供显示。

我知道还需要添加更多内容才能真正获得 useful/usable 信息等等,但我无意中发现它能够给我任何信息至今。现在它根本没有产生任何错误(或任何消息),所以我没有可以粘贴的内容。

我尝试了多种方法来在按下 UI 按钮时执行 $fullquery,但没有任何效果;

我尝试将 $query 存储为 hashtable/array,我尝试将 $fullquery 作为数组执行,同时尝试了两者。

我看过 Tome Tanasovski 的 https://powertoe.wordpress.com/2010/02/10/dynamic-code-in-powershell/

stackexchange 上的许多动态代码帖子都对制作变量名称感兴趣 dynamic/mutatable 而不是这些变量的内容。

我也看过很多帖子涉及使用 Invoke-Command 和 & 通过单个字符串参数执行某些操作,但我的问题是我希望能够加载一个具有不确定数字的数组管道命令(而不是参数)存储为字符串,然后像执行命令一样执行整行。

我什至尝试过直接存储命令; $query = | whereobject {...so on } 但是 powershell 当然不会让你这样做,它只会接受它作为一个字符串。

鉴于我已经完全尝试了许多其他人发现的工作,我开始怀疑这是否是 Powershell V2 的限制?

我认为您不需要使用元编程来解决这个问题。问题中唯一棘手的部分是设置 -recurse 开关,这可以通过使用花哨的开关语法来解决:

$someBooleanVariable = $false
gci g:\foo\bar\ -recurse:$someBooleanVariable