아래 스크립트는 나를 당황케하는 powershell의 예기치 않은 동작을 보여줍니다. 이 문제는 내가 잘못하고있는 것 같지만, 알아낼 수는 없습니다. 이 스크립트는 특정 요일의 특정 시간을 확인하고 매개 변수 세트에 따라 다양한 조치를 취합니다. 내가 포함 된 루프의 반복에 번갈아 불린 있습니다. 적어도 문제가있다. 여기에 내가 변수를 사용하고 방법을 설명하고 이상한 행동을 생성하는 예제 스크립트는 다음과 같습니다이상한 Powershell 변수 동작
$DisabledRequests = $false
$Time = Get-Date -UFormat %R
$Day = Get-Date -UFormat %u
function checktime() {
if($Time -ge "07:00" -and $Time -le "19:00" -and $Day -le "5"){
if($DisabledRequests -eq $false){
Write-Host "Time is $time, Day is $day. Inside disabledrequests -eq false statement."
$DisabledRequests = $true #Sets variable to true
$DisabledRequests -eq $true #Prints true on the console because the statement is true
}else{
}
}else{
Write-Host "Outside limited time parameters."
if($DisabledRequests -eq $true){
Write-Host "Changing disabled requests var to false."
$DisabledRequests = $false
}
}
}
for($i=0; $i -le 10; $i++){
checktime
}
예상되는 동작은 스크립트가 루프 불구을 본 순간 (조건은 시간과 조건의 상대가 될해야한다는 것입니다 in $true
) 그리고 다른 조건부 $DisabledRequests
변수의 상태를 검사합니다. 변수가 처음에 $false
이기 때문에 첫 번째 반복에서 조건부가 올바르게 실행됩니다. 이 조건부 동작의 일부는 변수 $DisabledRequests
을 $true
으로 설정하는 것입니다. 적어도 $DisabledRequests -eq $true
부분은 콘솔에 "True"를 인쇄합니다.
변수가 $DisabledRequests
인 경우 조건부 ($DisabledRequests -eq $false)
이 여전히 true로 평가되는 이유는 무엇입니까?
편집 :
나는 또한 내가 참으로Set-Variable
으로 다시 작성 후
Clear-Variable
와 변수를 지우고 시도했습니다, 그리고 중 예상대로 작동하지 않는 것을 추가 할
.