如何检查所有返回值是否均为 true?

2024-04-19

有没有一种简单的方法来确保所有返回的值都是 True?在下面的示例中,我有一个代表文件的对象集合。我想在继续之前确保所有源文件都存在。我将所有路径传递给 Test-Path,该函数为每个文件返回 True/False。

    > $filesToUpdate = @(
      [PsCustomObject] @{ Source = (Join-Path $basePath "Abc.module"); }
      [PsCustomObject] @{ Source = (Join-Path $basePath "Def.module"); }
    )

    > $filesToUpdate.Source | Test-Path

    True
    True

    > # How can I check if all the returned values are true?

如何检查所有返回值是否为True?


来补充FoxDeploy 的有用答案 https://stackoverflow.com/a/38313607/45375以更广阔的视野管道使用:

tl;dr:

  • (Test-Path $filesToUpdate.Source) -contains $false:

    • 速度快,但不适合非常大的集合,因为输入集合必须作为一个整体适合内存(在这个问题的上下文中确实如此)。

    • Test-Path接受一个数组作为输入并输出一个反映每个输入项存在的并行数组;-contains测试 LHS 数组中 RHS 标量的成员资格。

    • 该解决方案在概念上最简单且最快(与未优化的管道使用相比)。
  • $false -ne ($filesToUpdate.Source | Test-Path | ? { -not $_ } | Select-Object -First 1)

    • 这种方法是如果输入集合太大而无法装入整个内存,则必须这样做/ 内存使用必须保持不变。

      • 注:此处为管道输入$filesToUpdate.Source根据定义,它是内存中的集合,但讨论的场景适用于commands产生大量输出对象逐个并将它们发送到这样的管道。
    • ? { -not $_ }(短缺:Where-Object { -not $_ }) 过滤布尔值输出Test-Path只包含$false值(如果有)。因此,滤波器仅在至少一个条件下才会产生输出$false价值存在。

    • Select-Object -First 1一旦收到第一个对象(第一个对象),就会通过退出管道来优化处理[PSv3+]$false值)(如果有),这意味着输出要么是单个$false值,或者根本没有输出。

      • 此优化的性能影响完全取决于输入数据,并且范围可能非常大(first大型输入集合中的项目映射到$false)到无(没有项目映射到$false).
    • $false -ne ...然后测试管道的输出not being $false,这意味着Test-Path$true for all输入路径。

      • 请注意,与$false must被使用,因为-not (...) / ! (...) would not按预期工作,因为否定产生的命令无输出也产生$true.

一般来说管道是 PowerShell 不可或缺的一个强大概念,尽管它们引入了处理开销,但因其概念优雅而值得使用,除非它们出现性能问题。

  • 如果性能至关重要,则可以绕过管道,但这可能很麻烦。

  • 相反,PowerShell 灵活运营商有时提供概念上都很优雅的解决方案and fast,就像这里的情况一样,尽管可能会以内存消耗为代价。
    在这种情况下使用管道的唯一原因是处理大型输入集合。

为了让您了解相对性能,以下是比较解决方案的测试时间,由输入集合的大小和平均运行次数参数化。

在底部找到测试脚本。

请注意,输入数据的构造是为了将第一个(也是唯一一个)不存在的路径放置在middle输入集合的。

这种选择极大地影响了性能Select-Object -First 1解决方案: 如果您在开始,如果你放置它,它会表现最好放在最后或根本不包含,就不会再有任何表现(反之)。


我的机器(2012 年末的 iMac)中的样本数字,以秒为单位:

> .\Test.ps1 -count 10 -repeat 10  # 10 input items, timing averaged over 10 runs

Command                                           10-run average
-------                                           --------------
-contains, no pipeline                            .00124
-contains, pipeline                               .00170
pipeline, where-object, select -first 1           .00276
pipeline, where-object                            .00314
pipeline, where-object, Test-Path in script block .00460

> .\Test.ps1 -count 100 -repeat 10

Command                                           10-run average
-------                                           --------------
-contains, no pipeline                            .01190
pipeline, where-object, select -first 1           .01328
-contains, pipeline                               .01836
pipeline, where-object                            .02365
pipeline, where-object, Test-Path in script block .03725

> .\Test.ps1 -count 1000 -repeat 10

Command                                           10-run average
-------                                           --------------
pipeline, where-object, select -first 1           .11154
-contains, no pipeline                            .11764
-contains, pipeline                               .16508
pipeline, where-object                            .22246
pipeline, where-object, Test-Path in script block .37015

> .\Test.ps1 -count 10000 -repeat 10

Command                                           10-run average
-------                                           --------------
pipeline, where-object, select -first 1           1.09919
-contains, no pipeline                            1.15089
-contains, pipeline                               1.75926
pipeline, where-object                            2.21868
pipeline, where-object, Test-Path in script block 3.65946

Test.ps1

param(
  [int] $count = 50
  ,
  [int] $repeat = 10
)

# Create sample input array.
$paths = @('c:') * $count 
$paths[$paths.Count / 2] = 'nosuch'


$timingPropName = "$repeat-run average"

@(
  [pscustomobject] @{ Command = "-contains, no pipeline"; $timingPropName = 
    (1..$($repeat) | % { (Measure-Command { (Test-Path $paths) -contains $false }).TotalSeconds } | 
      Measure-Object -average | % Average) }
  [pscustomobject] @{ Command = "-contains, pipeline"; $timingPropName = 
    (1..$($repeat) | % { (Measure-Command { ($paths | Test-Path) -contains $false }).TotalSeconds } | 
      Measure-Object -average | % Average) }
  [pscustomobject] @{ Command = "pipeline, where-object, select -first 1"; $timingPropName = 
    ( 1..$($repeat) | % { (Measure-Command { $paths | Test-Path | ? { $_ -eq $false } | Select-Object -First 1 }).TotalSeconds } | 
      Measure-Object -average | % Average) }
  [pscustomobject] @{ Command = "pipeline, where-object"; $timingPropName = 
    (1..$($repeat) | % { (Measure-Command { $paths | Test-Path | ? { $_ -eq $false } }).TotalSeconds } | 
      Measure-Object -average | % Average) }
  [pscustomobject] @{ Command = "pipeline, where-object, Test-Path in script block"; $timingPropName = 
    (1..$($repeat) | % { (Measure-Command { $paths | ? { !(Test-Path $_) } }).TotalSeconds } | 
      Measure-Object -average | % Average) }
) | 
  Sort-Object $timingPropName | 
    Format-Table Command, @{ n=$timingPropName; e={ '{0:.00000}' -f $_.$timingPropName } }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查所有返回值是否均为 true? 的相关文章

  • Powershell Bash/Zsh 命令中的多个参数

    无法在 Powershell 中运行以下 Bash Zsh 命令 KeyPath Join Path Path this Plate ChildPath install tekton key kubectl create secret do
  • Connect-AzAccount 无提示

    我正在尝试使用以下方式登录 Azure 门户 Connect AzAccount 此代码要求我输入我不想要的提示 我们可以使用一些简单的配置脚本自动登录吗 正如Joy所说 您可以通过凭据使用用户帐户登录 但不会出现任何提示 请确保您的帐户未
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • Powershell 调用程序集委托

    我有一个用于过程控制应用程序的 dll 程序集 我在我的内部使用 load电源外壳 script 该DLL包含我需要使用的委托类型 委托名称是 X Y Delegate 我在该 DLL 中有另一个方法 应该这样调用 Method deleg
  • 将 stdout 和 stderr 重定向到单独的文件时抑制 NativeCommandError 输出

    我有以下文件 test ps1 e test bat gt stdout txt 2 gt stderr txt test bat echo off echo write to stdout echo write to stderr gt
  • 如何使用 R 或 PowerShell 从文本文件中提取数据?

    我有一个包含如下数据的文本文件 This is just text Username SOMETHI C Text Account DFAG Finish time 1 JAN 2011 00 31 58 91 Process ID 202
  • PowerShell Group-Object 不再将对象拆分为固定大小的集合

    我在一个脚本中写了这个 我认为该脚本运行良好 但似乎已停止工作 testList object 1 object 2 object 3 object 4 object 5 counter 0 maxSize 2 groupedList te
  • 如何在 IIS 8 中远程停止/启动应用程序池

    注意 每条线使用一行 我在 IIS 6 中使用了这些命令 它们工作得很好 Start get wmiobject namespace root MicrosoftIISv2 computername REMOTE SERVER class
  • 一行 PowerShell 脚本

    我创建了这个基本的单行 PowerShell 脚本 如果我运行以下命令 该脚本就会执行adAD 的 cmdlet 然后是查询的其余部分 但是尝试将它们一起运行时 它似乎只加载了 cmdlet 而没有执行 cmd 的其余部分 powershe
  • Powershell Invoke-Command 远程手动工作,但不能通过 Jenkins

    我遇到了一个非常奇怪的情况 即从 Windows Server 2012 R2 手动运行相同的命令时可以工作 但从同一服务器上运行的 Jenkins 从属进程无法工作 首先 手动运行的输出 管理 PowerShell 窗口 PS C Use
  • PowerShell 模块中忽略 Write-Verbose

    我希望使用Write Verbose脚本和函数中的命令行开关 它在脚本 ps1 文件中按预期工作 但在模块 psm1 文件中则不然 该 commandlet 在模块中被忽略 运行以下脚本 PS gt scaffold ps1 verbose
  • Powershell tail 多个文件命令

    我可以通过以下命令尾随一个文件 Get Content Path C log1 txt Tail 10 Wait 如何将其扩展到多个文件 我尝试了以下方法但没有成功 Get Content Path C log1 txt C log2 tx
  • 如何使用 .NET 4 运行时运行 PowerShell?

    我正在更新管理一些 NET 程序集的 PowerShell 脚本 该脚本是为针对 NET 2 与 PowerShell 运行的框架版本相同 构建的程序集编写的 但现在需要使用 NET 4 程序集以及 NET 2 程序集 由于 NET 4 支
  • Powershell日期类型无法找到

    我正在尝试使用PowerShell连接virustotal API 代码来自virustotal网站 我得到 无法找到类型 System Security Cryptography ProtectedData 错误信息 代码如下 funct
  • 为什么此 PowerShell 脚本无法正确执行此外部命令?

    以下代码将输出我希望运行的命令字符串 string SourceRepo C inetpub wwwroot Spyda string Repo C inetpub wwwroot BranchClone string revstring
  • powershell stdin 管道和重定向

    你好 我一直在制作一个小的跨平台脚 本 我可以将其卷曲并通过管道传输到bash和Powershell中 基本思想是服务器向解释器发送一个命令 然后它给出一个命令将所有输出重定向到标准输出 bash 中的一个例子是 some commands
  • 导入模块 WebAdministration 不会从脚本加载,但会从命令行加载

    我正在进行一个使用的项目PowerShell编写构建脚本 该构建利用了WebAdministration模块来管理本地 IIS 实例 当我运行构建脚本时 尝试导入时会引发以下错误WebAdministration 错误 06 29 2016
  • Pester 没有捕获抛出的错误

    当我运行以下纠缠测试时 我希望它能够捕获预期的错误 但事实并非如此 但是 当我使用不同的函数和不同的 throw 语句运行测试时 它会起作用 纠缠测试 Describe Remove GenericCredential Function T
  • 在 Powershell 4 中压缩和解压缩文件

    我使用的是 Windows Server 2012 R2 64 位 我有 powershell 版本 4 可用 我正在尝试压缩和解压缩文件 当我尝试 Write Zip 命令时 它会抛出以下错误 Write Zip 术语 Write Zip
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da

随机推荐

  • 如何在 WPF 应用程序中捆绑 View、ViewModel 和 DataTemplate 以便于重用?

    情况 我想创建一个由 ViewModel 驱动的灵活应用程序 基本流程是这样的 设计主ViewModel 创建一个 UserControl 作为视图 并为主 ViewModel 创建一个 DataTemplate 以选择该视图 如果有子组件
  • 使用 Django 模型表单 + 表单向导 + Crispy - 不进行第二步

    我对 django 中的表单相当陌生 我的问题是我有一些非常大的模型 我必须将它们分解成一系列较小的表单以供用户填写 所以我一直在尝试使用脆皮表单 昨天在 YouTube 上观看 Mike Hibberts 教程 Python Django
  • 使用 Python (OpenCV) 中的霍夫线变换从模拟时钟读取时间

    我一直在尝试编写一个程序 在图片上找到钟面 然后继续从中读取时间 定位效果相当好 但阅读时间 不是那么多 cv2 HoughLines 函数返回线条所在的角度 从图像顶部开始测量 以及它们与图像左上角的距离 经过一些调整后 我成功地说服我的
  • 仅从 Internet Explorer 上的文件输入中获取文件名

    我只需要从 HTML 输入文件返回文件名
  • 是否可以将 getopts 与位置参数混合使用?

    我想设计一个 shell 脚本作为几个脚本的包装器 我想指定参数myshell sh using getopts并将其余参数以相同的顺序传递给指定的脚本 If myshell sh执行方式如下 myshell sh h hostname s
  • Android @Override 错误

    今天我终于让我的 facebook 实现工作起来了 当我开始在我的应用程序中实现它时 我通过 Override 收到以下错误 类型的 onComplete Bundle 方法 FBConnectionActivity LoginDialog
  • Windows:如何测试高dpi下的UI?

    我想测试我的应用程序的反应high dpi 设置 我指的不仅仅是 120dpi 我想测试更高的 dpi 设置 例如 150dpi 300dpi 600dpi 1000dpi 1200dpi 我的开发机器的显卡无法达到 300dpi 甚至 1
  • Angular @Input getter/setter 和非原始值

    问题 我希望能够在每次子组件绑定的对象中的属性发生更改时调用一个函数 但是 即使可以明显看到绑定的输入属性正在更新 setter 也只会被调用一次 这一切都是因为需要将子组件绑定到其父组件属性 而父组件属性恰好是具有深度嵌套属性的复杂对象
  • Asp.Net Core 3.1 Cookie 未附加 Razor 页面 C#

    Cookie 没有使用以下代码附加到页面 我尝试将 IsEssential 添加到选项中 但它不起作用 使用 Asp Net Core 3 1 Razor 页面 这是我的大部分startup cs 和附加的cookie 代码 启动 cs p
  • ORDER BY 的列有时为空

    Mysql 看起来像这样 SELECT CompanyName LastName FirstName FROM JOIN ORDER BY CompanyName LastName FirstName 现在的问题是 A 列有时是空的 或者是
  • 为什么尝试使用动态参数调用扩展方法时出现错误 CS1973

    考虑以下代码 internal static class Program public static string ExtensionMethod this string format dynamic args return format
  • 使用 ffmpeg 处理流的解码数据时出错

    我正在使用以下命令 ffmpeg i video1a flv i video1b flv i video1c flv i video2a flv i video3a flv i video4a flv i video4b flv i vid
  • 3D 游戏的 Libgdx 渲染层

    在我的第一个 3D 游戏中 我现在想要渲染地板 它实际上是一个平面 不是 libgdxPlane on y 0 我想添加一个Texture到它 这样我就可以在每个级别有不同的楼层 现在我的问题是 创建和渲染这种纹理地板的最佳方法是什么 我考
  • django 应用程序的 Heroku 推送获取“没有名为 psycopg2.extensions 的模块”

    我正在尝试将 django 应用程序推送到 heroku 并收到一个我在 heroku 或 stackoverflow 论坛中从未见过的错误 我正在使用 postgres 我不知道该从哪里开始 我在任何文档中都没有看到任何说明问题的内容 主
  • 在 TeamCity 构建期间将 nuget 包发布到 Octopus

    有一个已知问题 如果您在 TeamCity 构建期间进行部署 则会部署以前的版本 因为当前版本仅在构建完成后才可用 文档建议创建辅助 TeamCity BuildConfiguration 作为解决方法 但它很糟糕并且似乎不再起作用 有许多
  • 在 AngularJS 中的控制器之间共享数据

    我使用以下工厂从 API 获取数据并将其存储到名为 apiData 的本地变量中 app factory MyFactory function resource q var apiData var service var resource
  • android 清除字符串中的值

    我有一个应用程序 可以让您单击按钮从起始值 20 中添加和减去 5 或 5 以及 1 或 1 我对其进行了设置 这样当单击按钮时 它将将该值放入字符串并显示它 以便用户可以看到他们按下的内容的历史记录 我有一个名为 Reset 的方法 将起
  • 如何在 Android 中播放 GIF

    Hello stackoverflow我正在尝试开发一个 Android 应用程序来玩我自己的GIF 这是代码片段 MainActivity java public class MainActivity extends Activity O
  • 为什么 std::setbase(2) 不切换到二进制输出?

    cppreference 页面位于std setbase http en cppreference com w cpp io manip setbase says 除 8 10 或 16 之外的基值会将基域重置为零 这对应于十进制输出和依赖
  • 如何检查所有返回值是否均为 true?

    有没有一种简单的方法来确保所有返回的值都是 True 在下面的示例中 我有一个代表文件的对象集合 我想在继续之前确保所有源文件都存在 我将所有路径传递给 Test Path 该函数为每个文件返回 True False gt filesToU