programing

단순 PowerShell 마지막 쓰기 시간 비교

magicmemo 2023. 8. 14. 22:47
반응형

단순 PowerShell 마지막 쓰기 시간 비교

파일 속성에 액세스하여 LastWriteTime 속성을 검색하여 현재 날짜와 비교하고 날짜 차이를 반환할 수 있는 PowerShell 스크립트가 필요합니다.

이런 게 있어요

$writedate = Get-ItemProperty -Path $source -Name LastWriteTime

...그러나 마지막 쓰기 시간을 "날짜 시간" 데이터 유형에 캐스트할 수 없습니다."@{LastWriteTime=...date를 변환할 수 없습니다..."시스템"으로.날짜 시간".

다음을 시도해 보십시오.

$d = [datetime](Get-ItemProperty -Path $source -Name LastWriteTime).lastwritetime

이것은 항목 속성 이상성의 일부입니다.Get-ItemProperty를 실행하면 값이 반환되지 않고 속성이 반환됩니다.값에 도달하려면 간접적인 수준을 하나 더 사용해야 합니다.

(ls $source).LastWriteTime

("ls", "dir" 또는 "gci"는 Get-ChildItem의 기본 별칭입니다.)

제가 공유하고 싶은 예가 있습니다.

$File = "C:\Foo.txt"
#retrieves the Systems current Date and Time in a DateTime Format
$today = Get-Date
#subtracts 12 hours from the date to ensure the file has been written to recently
$today = $today.AddHours(-12)
#gets the last time the $file was written in a DateTime Format
$lastWriteTime = (Get-Item $File).LastWriteTime

#If $File doesn't exist we will loop indefinetely until it does exist.
# also loops until the $File that exists was written to in the last twelve hours
while((!(Test-Path $File)) -or ($lastWriteTime -lt $today))
{
    #if a file exists then the write time is wrong so update it
    if (Test-Path $File)
    {
        $lastWriteTime = (Get-Item $File).LastWriteTime
    }
    #Sleep for 5 minutes
    $time = Get-Date
    Write-Host "Sleep" $time
    Start-Sleep -s 300;
}

(Get-Item $source).LastWriteTime제가 선호하는 방법입니다.

OP가 그 중 하나를 그들의 문제를 해결하는 것으로 받아들였기 때문에 저는 여기서 어떤 답변도 비난할 수 없습니다.하지만, 저는 그것들이 한 가지 측면에서 결함이 있다는 것을 발견했습니다.할당 결과를 변수에 출력하면 원하는 답뿐만 아니라 여러 개의 빈 줄이 포함됩니다.예:

PS C:\brh> [datetime](Get-ItemProperty -Path .\deploy.ps1 -Name LastWriteTime).LastWriteTime

Friday, December 12, 2014 2:33:09 PM



PS C:\brh> 

저는 코드의 간결함과 정확성의 두 가지를 좋아합니다. 브리너리는 로저 립스콤에게 모자의 끝으로 간결함에 대한 권리가 있지만 결과의 추가적인 행으로 인해 둘 다 정확성을 놓칩니다.OP가 제가 결승선을 통과할 수 있었던 이유는 바로 여기에 있다고 생각합니다.

PS C:\brh> (ls .\deploy.ps1).LastWriteTime.DateTime
Friday, December 12, 2014 2:33:09 PM

PS C:\brh> 

PowerShell에서 프롬프트를 구분하는 데 사용하는 추가 줄이 부족합니다.이제 비교를 위해 변수에 할당하거나, 제 경우와 마찬가지로 나중에 세션에서 읽고 비교할 수 있도록 파일에 저장할 수 있습니다.

약간 더 쉬움 - 사용new-timespancmdlet - 현재 시간에서 시간 간격을 만듭니다.

ls | where-object {(new-timespan $_.LastWriteTime).days -ge 1}

에는 오늘 작성되지 않은 모든 파일이 표시됩니다.

사용하다

ls | % {(날짜 가져오기) - $.마지막 쓰기 시간 }

디프를 검색할 수 있습니다.대체할 수 있습니다.ls일렬 종대로

언급URL : https://stackoverflow.com/questions/1018934/simple-powershell-lastwritetime-compare

반응형