2015-09-02 2 views
1

Почему это не будет работать?Объявление переменной в заявлении IF

if (([datetime] $a = Date),$a.DayOfWeek -ne 'Wednesday'){ 
    Write-Host 1 
    Exit 
}ElseIf ($a.hour -ne 9){ 
    Write-Host 2 
    Exit 
} 

Do stuff... 

, но это будет

if (($connected = Test-Connection 1.1.1.1 -Quiet), $connected -eq $false){ 
    Start-Process msg -ArgumentList "$env:USERNAME Not Connected..." 
    Exit 
} 

Do stuff.. 

В первом примере мой сценарий всегда выходит, если я не двигаться [datetime] $a = date снаружи, если заявление. Однако второй пример работает без проблем.

Кроме того, если вставить $a в первый оператор if, он возвращает правильное значение datetime.

+0

'если ($ ([DateTime] $ а = Дата; $ a.DayOfWeek -ne 'среды')) {' – PetSerAl

+0

@PetSerAl работает как шарм. –

+1

'get-help about_Operator_Precedence' – Cole9350

ответ

0

Не используйте , внутри, если заявление, так как это приводит к созданию массива с 2-позиционным - объект, который if() всегда будет оценивать до $true.

Причиной этого является то, что, когда вы заключите операцию присваивания в стенания скобках (то есть: (), не $() которого оператор подвыражения), правая сторона присвоения сам вернулся:

PS C:\> $null = 123 # the operation itself doesn't generate output 
PS C:\> ($null = 123) # but we can force it to do so 
123 

Так что, когда вы делаете что-то вроде:

($a = Get-Date),$a -eq (Get-Date) 

вы действительно продуцирующие следующее выражение: @($a,$a) -eq (Get-Date)


Вы можете сделать это, как это вместо:

if(([datetime]$a = Date).DayOfWeek -ne 'Wednesday'){ 
    # It's not wednesday 
} 

и

if (($connected = Test-Connection 1.1.1.1 -Quiet) -eq $false){ 
    # No response 
} 
0

я в конечном итоге использовал следующий код:

if ($([datetime] $a = Date; $a.DayOfWeek -ne 'Wednesday') -eq $true){ 
    Write-Host 1 
    Exit 
}ElseIf ($a.hour -ne 9){ 
    Write-Host 2 
    Exit 
} 

Do stuff.. 

и

if ($($connected = Test-Connection 1.1.1.1 -Quiet; $connected) -eq $false){ 
    Write-Host 3 
    Exit 
} 

Do stuff.. 
Смежные вопросы