我正在尝试构建一个小型GUI工具来衡量映射网络驱动器上的文件夹和文件大小。 UI具有预设复选框/单选按钮,用于在要执行的最终脚本中添加或删除管道
'''按钮执行变量$ fullquery
$fullQuery = $querycmd + $querypath + $setrecurse + $query + $querysuffix
这应该产生最终的字符串;
gci g:\foo\bar\ -recurse | where-object {$_.Extension -eq ".psd"} | select -property name, length
每个部分都存储在下面的变量中,并且master $ fullQuery变量将它们连接成一个字符串来执行;
$querycommand
#是; GCI
$querypath
#这是一组连接的字符串变量
$setrecurse
#添加(或不添加)-recurse标志
$query
#是查询内容所在的数组; where-object命令(主要是扩展),
每个UI元素在字符串"中都有自己的代码where-object {$ _。Extension -eq" .psd"}"启用复选框会将该字符串添加到$ query数组中。
$querysuffix
#是过滤器以可管道格式恢复文件/文件夹大小和名称以供显示。
我知道还有更多需要添加的东西才能真正获得有用/可用的信息等等,但我偶然发现它能够让它给我任何信息到目前为止。现在它根本没有产生任何错误(或任何消息)所以我没有任何东西可以粘贴。
当按下UI按钮时,我尝试了多种执行$ fullquery的方法,但没有任何效果;
我已尝试将$ query存储为哈希表/数组,我已尝试将$ 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的限制?
答案 0 :(得分:0)
我认为你不需要使用元编程来解决这个问题。问题唯一棘手的部分是设置-recurse
开关,可以使用花哨的开关语法解决:
$someBooleanVariable = $false
gci g:\foo\bar\ -recurse:$someBooleanVariable