组合 Group-Object 和 ForEach-Object?

2024-02-26

我正在开发一个名为Merge-Xsd可以合并相似的 XML 模式。它需要一个路径列表,加载模式,合并它们,并生成一个XMLDocument作为输出。

特定文件名的所有模式都被认为是“相似的”,所以我正在做的就是获取特定目录结构中的所有子项,根据文件名对它们进行分组,然后尝试将它们传递给我的自定义cmdlet。

将它们分组很容易:

$grouping = Get-ChildItem -Recurse -Filter *.xsd |
    Group-Object -Property Name -AsHashTable -AsString

但是,将它们作为同一管道的一部分进行处理则不然。我已经接近这样了:

$grouping.Keys |
    ForEach-Object { ($grouping[$_] |
        Select-Object -ExpandProperty FullName | Merge-Xsd).Save("C:\Out\$_") }

但我要什么really喜欢能够做的是使用ForEach-Object紧接着Group-Object迭代每个组项目,从而消除了单独的需要$grouping多变的。

我该如何使用ForEach-Object获取键/值对,同时保留每次调用Merge-Xsd范围仅限于该特定的键/值对?

20150224更新:

The Merge-Xsd选项集非常基本:

NAME
    Merge-Xsd

SYNTAX
    Merge-Xsd [-Path] <string[]>  [<CommonParameters>]

它实际上只是为了一次性扔一堆文件并将它们合并成一个输出,这是一个XmlDocument。 (我对输出进行了建模ConvertTo-Xml.)


我认为你可以像这样嵌套它:

Get-ChildItem -Recurse -Filter *.xsd |
    Group-Object -Property Name | 
        ForEach-Object { 
           ($_.Group.FullName | Merge-Xsd).Save("C:\Out\$($_.Name)")
        }

我没有您的 cmdlet 或文件,但在我有限的测试中这可以工作。

一些解释

我拿出了-AsHash and -AsString参数,以便我们可以直接处理返回的组对象Group-Object.

The $_.Group.FullName比乍一看更复杂。$_这里指的是单个组对象,因为我们处于ForEach-Object。组对象包含一个名为Name这是组的名称,以及一个名为Group这实际上是组内各个项目的集合,所以$_.Group是一个集合。

从这里开始,管道就有意义了that to ForEach-Object同样,由于该集合中的每个项目都将是一个 FileInfo 对象,并且您想要获取FullName要传递给的财产Merge-Xsd.

在这里,我们利用了一些 powershell 魔法。当你参考$c.Property where $c是一个对象的集合Property属性,您将返回一个由属性对象组成的集合。

So $props = $c.Property是相同的:

$props = $c | ForEach-Object { $_.Property }

知道了这一点,我们就可以通过管道$_.Group.FullName直接进入Merge-Xsd传递组中所有文件的所有全名.

在这种背景下,$_.Name仍然引用组对象,因此它是组的名称,而不是文件的名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

组合 Group-Object 和 ForEach-Object? 的相关文章

随机推荐

  • Zend Framework:在控制器名称/URL 中使用破折号

    我有一个网址 我希望看起来像http 服务器 我的 操作名称 http server my action name 显然 我不能在 ControllerName 函数中使用 并且下划线不起作用 这可能吗 默认情况下 http server
  • Apache 服务器忽略 .htaccess

    我试图让一个网站在我的测试环境中运行 但不知何故它无法运行 我可以加载正常的索引页面 但是当我想访问 page test 时 它会抛出一个错误 指出该页面不存在 我的日志说 File does not exist home page url
  • 使用 @mock.patch.object 模拟方法时返回值未按预期设置

    我的测试应该会成功 因为我用 mocker return value 给出了返回值 这应该为客户提供一个值 以便函数调用最终出现在 else 语句 客户找到 中 但事实并非如此 据我所知 返回值没有被正确模拟 但为什么呢 Mock from
  • Windows .bat/.cmd 函数库在自己的文件中?

    有构建函数的好方法 http www dostips com DtTutoFunctions php在 DOS bat cmd 脚本中 要模块化某些安装脚本 最好将带有函数库的文件包含到 bat cmd 脚本中 我尝试的是 主脚本 bat
  • BitArray - 移位

    我有一个 System Collections BitArray 数组 3000 个项目 我想将所有位向左移动 1 但是该集合似乎不支持该操作 即 bitArray Thanks 这个简单的代码片段展示了手动执行此操作的方法 的价值bitA
  • 返回空指针异常 - Java Selenium Webdriver

    使用 Java 在 Selenium WebDriver 中运行测试时出现空指针异常 由于某种原因 测试返回 null 即使所有内容都被正确声明 我认为 我在这里错过了什么 做错了什么 给定这段代码 public class HomePag
  • 熊猫通过重置获取累积总和

    Problem 我试图保留连续时间戳 分钟频率 的运行总数 我目前有一种方法可以获取累积和并在两列不匹配的情况下重置它 但它是通过 for 循环完成的 我想知道是否有一种方法可以在没有循环的情况下做到这一点 Code cb arbitrag
  • 为什么 opencsv 在写入文件时将 csv 标头大写

    使用 OpenCSV 4 6 将 Bean 写入 CSV 文件时 所有标题都更改为大写 尽管 bean 有 CsvBindByName 注释 但它正在更改为大写 Java 豆 public class ProjectInfo impleme
  • 如何在 SQLCMD 中抑制连字符

    如何从结果集中抑制连字符 sqlcmd命令 C temp gt sqlcmd d AdventureWorks s Q SET NOCOUNT ON SELECT top 5 FirstName LastName FROM Person C
  • 在 Windows 上将 PPT 转换为 JPG/PNG

    我想在 Windows 环境中以编程方式转换一组图像中的 ppt 演示文稿 每张幻灯片一个 我尝试修改以下将 ppt 转换为 pdf 的代码 完美工作 但没有成功 谁能帮我 多谢 Option Explicit Sub WriteLine
  • Pandas 显示 Excel 文件的额外未命名列

    我正在开发一个使用 pandas 库的项目 其中我需要读取一个包含以下列的 Excel 文件 invoiceid locationid timestamp customerid discount tax total subtotal pro
  • 桌面应用程序.net中的视频通话

    我正在开发一个 wpf 应用程序 该应用程序应该具有视频通话功能 所以我寻求 Skype 为我提供解决方案 我正在使用 Skype4COM 库来做到这一点 我的应用程序中包含了 Skype 的所有朋友 我可以给朋友打电话 甚至可以进行视频通
  • 判断文件中是否存在字符串

    我有一个字符串列表 例如 John John Doe 彼得潘 在 txt 文件中 我想创建一个循环来检查某个名称是否存在 但是 如果我搜索 Peter 并且只存在 Peter Pan 我不希望这是真的 每行都必须完全匹配 哈哈 ep0的回答
  • 警告 C4267“参数”:从“size_t”转换为“DWORD”,可能会丢失数据

    我正在将代码从 32 位 vs2012 迁移到 64 位 vs2015 我在程序中遇到了以下函数调用 CryptHashData hHash BYTE AUTH ENCRYPTION KEY wcslen AUTH ENCRYPTION K
  • 删除 Meshlab 或 vcglib 中的自相交

    如何使用 Meshlab 应用程序或 vcglib 消除网格的自相交 这超出了范围 但 CGAL 中有一些函数 这仍然是实验性的 没有记录 但您可以使用该功能remove self intersections https github co
  • 不包含适合入口点的静态“main”方法

    我今天开始将代码组织到单独的 cs 文件中 为了允许与 UI 一起使用的方法继续这样做 我将在相同的命名空间和公共部分类名下创建 cs 代码 以便这些方法可以可互操作 我的标头在四个文件中看起来像这样 包括调用的主核心文件 public s
  • 内存警告但活动字节较小

    在我的应用程序中 在重复某些操作 选择图片 处理 多次后 我收到级别 1 的内存警告 然后收到级别 2 的内存警告 然后崩溃 泄漏工具没有显示任何泄漏 我还关注 Instruments 中的分配工具 我的实时字节大约为 4 MB 总共分配了
  • sqldf:从数据帧创建表错误:“没有这样的表”。并创建了两张表而不是一张

    我最近升级了 R RSQLite 和 sqldf 以下版本 通常情况下 sqldf create table foo as select from bar db test db 应该在附加的 sqlite 数据库中创建一个名为 foo 的表
  • 在 Reactjs 中迭代数组

    const cal days Sun Mon Tue Wed Thu Fri Sat const cal months Jan Feb March April May June July August Sept Oct Nov Dec co
  • 组合 Group-Object 和 ForEach-Object?

    我正在开发一个名为Merge Xsd可以合并相似的 XML 模式 它需要一个路径列表 加载模式 合并它们 并生成一个XMLDocument作为输出 特定文件名的所有模式都被认为是 相似的 所以我正在做的就是获取特定目录结构中的所有子项 根据