Ich wurde gebeten, c: \ temp auf Windows-Servern zu überwachen. Ich muss wissen, wie viele Ordner vorhanden sind und ob sie länger als 1, 2 und 3 Minuten sind. Diese Berichterstellung funktioniert in einfacher Form, jedoch nicht vollständig korrekt. Sobald es 1 Ordner gibt, erhalte ich immer noch einen Bericht dafür, dass er länger als 3 Minuten da ist, was falsch ist. Was ist los mit meiner for-Schleife? Mit der for-Schleife möchte ich die Anzahl der Ordner zählen, die vorhanden sind und ein bestimmtes Alter haben. Aber die for-Schleifen schleifen einmal und ich bekomme dann den Zähler = 1, obwohl dies falsch ist. dh es ist Sekunden alt, aber ich bekomme einen Bericht, dass es dort 3 Minuten ist. Jede Eingabe wäre dankbar. Vielen Dank
Hier ist mein sehr wahrscheinlich schlechter Code ...
$Now = Get-Date
$OneMinute = 1
$TwoMinutes = 2
$ThreeMinutes = 3
$TargetFolder = "C:\Temp"
$LastWrite1Min = $Now.AddMinutes(-$OneMinute)
$LastWrite2Min = $Now.AddMinutes(-$TwoMinutes)
$LastWrite3Min = $Now.AddMinutes(-$ThreeMinutes)
$i=0
$j=0
$k=0
$g=0
$StringThere = "There are "
$StringOne = "Folder(s) older than 1 Minute"
$StringTwo = "Folder(s) Older than 2 Minute"
$StringThree = "Folder(s) Older than 3 Minute"
$directoryInfo = Get-ChildItem C:\Temp | Measure-Object
#$directoryInfo.count #Returns the the number folders within the directory
If ($directoryInfo.count -eq 0){
write-host "Folder is empty - Good!"
}
##################################################
If ($directoryInfo.count -ne 0){
write-host "Temp has at least one folder present - ... "
$Folders = get-childitem -path $TargetFolder |
Where {$_.psIsContainer -eq $true} |
Where {$_.LastWriteTime -le "$LastWrite1Min"}
foreach ($Folder in $Folders)
{
$i = $i + 1
}
$Folders = get-childitem -path $TargetFolder |
Where {$_.psIsContainer -eq $true} |
Where {$_.LastWriteTime -le "$LastWrite2Min"}
foreach ($Folder in $Folders)
{
If ($Folder -ne "`0" ){
$j = $j + 1
}
}
$Folders = get-childitem -path $TargetFolder |
Where {$_.psIsContainer -eq $true} |
Where{ $_.LastWriteTime -le "$LastWrite3Min"}
foreach ($Folder in $Folders)
{
if($_.LastWriteTime -le "$LastWrite3Min"){
}
}
foreach ($Folder in $Folders)
{
if($_.LastWriteTime -le "$LastWrite3Min")
{
$k = $k + 1
}
}
}#end of not zero if
#######################################################
write-host $StringThere $i $StringOne
write-host $StringThere $j $StringTwo
write-host $StringThere $k $StringThree
write-host $exitcode
exit $exitcode
Ich brauche den Exitcode, um korrekt zu sein, und die for-Schleife macht dies völlig falsch. Vielen Dank!
quelle