powershell - Get-childitem Lastwritetime未正确返回

标签 powershell get-childitem

我正在尝试使用CreationTime命令获取Lastwritetimeget-childitem,并将其与相同的汇编时间进行比较,以检查每5分钟是否有任何差异。

奇怪的是,如果程序集没有更改,并且导致比较对象失败,则每次获取记录时,毫秒数都会有所不同。

除了将时间转换为字符串格式之外,还有什么方法可以解决此问题?

以下是获取程序集详细信息的命令

Get-ChildItem -Path 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL' -include *.dll -Recurse|select @{Label=”AssemblyName”;Expression={$_.Name}},@{Label=”Size”; Expression={$_.Length}},@{label="Version";expression={if($_.versioninfo.productversion -eq $null) { 
              "NULL"
            } else { 
              $_.versioninfo.productversion
            }
          }},@{Label=”CreationTime”; Expression={$_.CreationTime}},@{Label=”LastWriteTimeUtc”; Expression={$_.LastWriteTimeUtc}}

并在5分钟后运行此命令并与compare-object比较
compare-object -$oldobject $newObject -property Name,Lastwritetime

最佳答案

我不知道为什么相差几毫秒(最有可能是inaccurate floating point number)的确切原因。

对于此类问题,通常的解决方案是在比较中使用epsilon值(在游戏编程中非常常见)。

Set-Variable -name EPSILON -value ([double]0.00001) #-option Constant
function Is-Same {
    Param(
    [Parameter(Mandatory = $true)] [double]$a,
    [Parameter(Mandatory = $true)] [double]$b
    )
    #return $a - $b;
    return [math]::abs($a - $b) -le $EPSILON;
}

Is-Same 1.000001 1.0000
Is-Same 1.00001 1.0000
Is-Same 1.0001 1.0000

True
False
False



根据需要调整ε值。 (遵守数字限制)

关于powershell - Get-childitem Lastwritetime未正确返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48235129/

相关文章:

Powershell:为什么 (gci c:\ddd).count on an Empty 文件夹不返回 0

windows - 远程系统服务重启

python - 使用 Python 请求进行 Azure App Insights 身份验证

Windows 脚本宿主错误 : Invalid character - Code:800A03F6 - Source: Microsoft JScript compilation error

powershell - 根据 "creationdate"复制文件并创建新文件夹

arrays - 将两个不同的Get-ChildItem调用的结果合并为一个变量,以对它们进行相同的处理

powershell - 从变量获取匹配的字数

git blame - 致命的 : bad revision '22'

powershell - 如何编写PowerShell函数来获取目录?

powershell - 如何让 Get-ChildItem 处理带有不间断空格的路径