有条件地通过管道传输到 Out-Null

2024-01-04

我正在编写一个 PowerShell 脚本msbuild一堆解决方案。我想计算有多少解决方案构建成功,有多少解决方案失败。我还想查看编译器错误,但仅限于第一个失败的错误(我假设其他错误通常也会出现类似的错误,并且我不想弄乱我的输出)。

我的问题是关于如何运行外部命令(msbuild在本例中),但有条件地通过管道传输其输出。如果我正在运行它并且还没有遇到任何失败,我不想通过管道传输它的输出;我希望它直接输出到控制台,而不进行重定向,因此它将对其输出进行颜色编码。 (像许多程序一样,如果 msbuild 发现其标准输出被重定向,它会关闭颜色编码。)但是如果我之前遇到过失败,我想通过管道传输到Out-Null.

显然我可以这样做:

if ($SolutionsWithErrors -eq 0) {
    msbuild $Path /nologo /v:q /consoleloggerparameters:ErrorsOnly
} else {
    msbuild $Path /nologo /v:q /consoleloggerparameters:ErrorsOnly | Out-Null
}

但似乎必须有一种方法可以在不重复的情况下做到这一点。 (好吧,它不一定是重复的——我可以省略/consoleloggerparameters如果我无论如何都将管道归零——但你明白了。)

可能还有其他方法可以解决这个问题,但今天,我特别想知道:是否有一种方法可以运行命令,但仅在满足特定条件时才通过管道传输其输出(否则不通过管道传输或将其输出重定向到所有,所以它可以做一些奇特的事情,比如颜色编码输出)?


您可以将输出命令定义为变量并使用Out-Default or Out-Null:

# set the output command depending on the condition
$output = if ($SolutionsWithErrors -eq 0) {'Out-Default'} else {'Out-Null'}

# invoke the command with the variable output
msbuild $Path /nologo /v:q /consoleloggerparameters:ErrorsOnly | & $output

UPDATE

上面的代码丢失了 MSBuild 颜色。为了保留颜色并避免 重复代码可以使用这种方法:

# define the command once as a script block
$command = {msbuild $Path /nologo /v:q /consoleloggerparameters:ErrorsOnly}

# invoke the command with output depending on the condition
if ($SolutionsWithErrors -eq 0) {& $command} else {& $command | Out-Null}

有没有一种方法可以运行命令,但仅在满足特定条件时才通过管道传输其输出(否则根本不通过管道传输或重定向其输出,因此它可以执行诸如颜色编码输出之类的奇特功能)?

更有可能的是,没有内置这样的方法。但它可以用函数来实现,并且函数可以按如下方式重用:

function Invoke-WithOutput($OutputCondition, $Command) {
    if ($OutputCondition) { & $Command } else { $null = & $Command }
}

Invoke-WithOutput ($SolutionsWithErrors -eq 0) {
    msbuild $Path /nologo /v:q /consoleloggerparameters:ErrorsOnly
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有条件地通过管道传输到 Out-Null 的相关文章

随机推荐

  • HTML 表格忽略元素样式宽度

    HTML 表格忽略元素样式宽度 我有一个 HTML 表格 其中某些单元格具有很长的文本内容 我想使用 jQuery 为这些单元格指定宽度 以像素为单位 但渲染的表格只是忽略给定的宽度 有什么方法可以强制表格遵守这个宽度吗 Thanks JS
  • 测量 OpenCV FPS

    我正在寻找一种正确的方法来测量 openCV FPS 我找到了几种方法来做到这一点 但它们都不适合我 我测试过的第一个使用time t 开始和 time t 结束 我认为一旦它返回一个转储的函数作为 fps x 时间图 我真的无法想象 fp
  • 将行号添加到现有 HTML

    我正在尝试向现有的 html 添加行号 行高不等 许多类型的字体大小和图像 每条线看起来像 div div
  • 如何使用适用于 Node.js 的 AWS 开发工具包在 s3 上创建文件夹或密钥?

    我正在使用适用于 Node js 的 AWS 开发工具包在 s3 上创建文件夹或密钥 我在谷歌上搜索 但一无所获 有谁知道如何使用适用于 Node js 的 AWS SDK 在我的存储桶下创建文件夹 如何检查您的存储桶中是否已存在该文件夹
  • 实体组件系统和共享公共基础类型的多个组件

    我正在尝试为我的游戏引擎实现一个简单的 ECS 我知道我的实现并不是严格意义上的 ECS 但我正在重构我的代码以使其更加基于组件 到目前为止 我有以下课程 Entity 它是组件的容器 并且由于我希望我的实体具有相同类型的多个组件 因此它将
  • 具有易失性或锁定的属性

    我有一个带有支持字段的属性 我想使其线程安全 获取和设置 get和set方法除了设置和返回之外没有任何逻辑 我认为有两种方法可以将逻辑封装在属性 self 中 易失性和锁定 我对两者的理解是正确的还是有错误 以下是我的例子 public c
  • Android 上的 MP3 解码

    我们正在为 Android 手机实现一个程序 用于播放来自互联网的音频流 我们所做的大约如下 下载自定义加密格式 解密以获取常规 MP3 数据块 将 MP3 数据解码为内存缓冲区中的原始 PCM 数据 将原始 PCM 数据传送到 Audio
  • 如何根据外部向量过滤表的行?

    1 我在 R 中读取了一个大表 其中包含超过 10000 行和 10 列 2 表的第 3 列包含医院名称 其中一些是重复的 甚至更多 3 我有一个医院名称的向量 例如其中10个有待进一步研究 4 您介意教我如何提取步骤 1 中具有步骤 3
  • Ansible:在角色目录中的目录中调用角色的剧本

    我想塑造我的 ansible 角色和剧本的目录结构 目前我有一个像这样的目录结构 group vars all group one group vars yml group vault yml host vars server1 yml p
  • 如何创建 GS1 DataBar Expanded 条形码?

    我需要创建一个GS1 DataBar Expanded RSS Expanded 条形码使用Code128字体或简单的二进制条形码字体 我知道如何使用应用程序标识符或创建校验和 但我不知道如何对数据进行编码GS1 DataBar Expan
  • Eigen 中的自定义标量类型

    我目前正在尝试设置一个自定义标量类型以与 Eigen3 库一起使用 atm 它是一个简单的包装器double 我已关注https eigen tuxfamily org dox TopicCustomizing CustomScalar h
  • 如何关闭 Cocoa 应用程序中的键盘声音?

    我的方法有问题OpenGL可可应用程序 每次keyUp KeyDown事件被触发 系统声音正在播放 我如何为我的应用程序禁用此逻辑 我有一种不好的预感 由于某种奇怪的原因 我的应用程序可能会将按键视为错误并播放系统警报声音 请帮忙 添加到您
  • 如何让 Python 使用 Mac OS TrustStore 中的 CA 证书?

    我需要在公司内部网上使用自定义根证书并将它们加载到 Mac OS TrustStore KeyChain 中确实解决了所有浏览器和 GUI 应用程序的问题 看来它甚至可以与以下版本一起使用curl随 Mac OS X 一起提供 但它不适用于
  • Google App Engine 的 Memcache (Java) 是全局缓存吗?

    我是 Google App Engine 的新手 最近几天我一直在使用 GAE 的 Memcache 来存储数据来构建一个应用程序 根据我的初步发现 GAE 的 Memcache 似乎不是全局的 让我进一步解释一下 我知道对 GAE 的不同
  • WSS 在 http 上工作吗?

    是否可以通过 http 建立 wss 协议 我在论坛上读到 ws 可以与 http 一起使用 但是 wss 只能与 https 一起使用吗 真的吗 因为我试图在本地主机上的 wamp 上测试它 但不起作用 ws告诉 WebSocket 客户
  • 如何在 Xcode 中创建可重用代码包?

    我正在开发一个 iPhone 应用程序 必须解析 xml 文件才能将它们放入数据库中 我还将在我的应用程序中使用相同的 xml 解析器 以便用户可以导入自己的数据 我想知道如何将这些 xml 解析器提取到捆绑包或库中 以便我可以在我的 iP
  • 如何使用 Android 将 .pdf .doc .txt 文件上传到服务器(mysql 数据库)

    我在将文件上传到服务器时遇到一些困难 我需要知道使用名称值对上传文件的完整代码 听到的是我的 android 代码 我只得到我的文件路径 如何将其上传到服务器 引用为 nameValuePairs add new BasicNameValu
  • Backbone.js `listento` 不会针对过滤后的集合触发

    listento仅针对全局集合触发 而不是我在创建视图时传递给视图的集合 例如 var MyView Backbone View extend initialize function this listenTo notes add this
  • 如何在浏览器中录制声音?

    我需要用户在浏览器上录制他们的声音 然后自动将生成的 mp3 上传到网络服务器 我认为用户按下一个大的开始记录 停止记录按钮来执行此操作 然后 这会将文件保存在用户硬盘上 然后它会被有效地压缩并自动通过 ftp 传输到网站 是否可以使用 A
  • 有条件地通过管道传输到 Out-Null

    我正在编写一个 PowerShell 脚本msbuild一堆解决方案 我想计算有多少解决方案构建成功 有多少解决方案失败 我还想查看编译器错误 但仅限于第一个失败的错误 我假设其他错误通常也会出现类似的错误 并且我不想弄乱我的输出 我的问题