我编写了一个简单的PowerShell过滤器,如果它的日期在指定的开始日期和结束日期之间,则将当前对象推送到管道中.管道下方的对象始终按升序排列,因此一旦日期超过指定的结束日期,我就知道我的工作已完成,我想告诉管道上游命令可以放弃他们的工作以便管道可以完成它的工作.我正在阅读一些非常大的日志文件,我经常想要检查一部分日志.我很确定这是不可能的,但我想问一下.
我想把这个功能:
function Test-Any {
[CmdletBinding()]
param($EvaluateCondition,
[Parameter(ValueFromPipeline = $true)] $ObjectToTest)
begin {
$any = $false
}
process {
if (-not $any -and (& $EvaluateCondition $ObjectToTest)) {
$any = $true
}
}
end {
$any
}
}
Run Code Online (Sandbox Code Playgroud)
到一个模块中。我刚刚创建了一个新模块 my-scripts.psm1 文件,其中仅包含上述函数并使用Import-Module <absolute path>
.
问题是,如果我使用模块中的函数1..4 | Test-Any { $_ -gt 3 }
会返回 false,因为$_
未设置为来自管道的值。
如果我在脚本中正常定义该函数并从那里使用它,它会按预期工作(为 $_ 分配整数值)。
Windows 7 下的 PowerShell v4.0 会发生这种情况。
此问题最流行的答案涉及以下 Windows powershell 代码(已编辑以修复错误):
$file1 = Get-Content C:\temp\file1.txt
$file2 = Get-Content C:\temp\file2.txt
$Diff = Compare-Object $File1 $File2
$LeftSide = ($Diff | Where-Object {$_.SideIndicator -eq '<='}).InputObject
$LeftSide | Set-Content C:\temp\file3.txt
Run Code Online (Sandbox Code Playgroud)
我总是得到一个零字节文件作为输出,即使我删除了 $Diff 行。
为什么输出文件总是为空,如何修复?