Почему мой оператор If с несколькими условиями -AND не будет работать правильно? - PullRequest
1 голос
/ 30 мая 2019

Я хочу выполнить несколько условий в своем предложении Powershell If и пытаюсь использовать оператор -AND для его достижения, но, похоже, он просто переходит прямо к предложению else.

В приведенном ниже коде я хочу убедиться, что в обеих папках нет файлов и что существует файл "watcher.txt".

$Success = "C:\temp\Success"
$Failed = "C:\temp\failed"
$watcher = "C:\temp\watcher.txt"

$directoryInfo3 = get-childitem "$Success\\*" -file | Measure-Object
$directoryInfo3.count
$directoryInfo4 = get-childitem "$Failed\\*" -file | Measure-Object
$directoryInfo4.count
    if ((test-path -path $Watcher) -AND 
        ($directoryInfo3 -eq 0) -AND 
        ($directoryInfo4 -eq 0)){
         Write-host "Success folder and Failed folder are empty, and Watcher file exists."}
         else
         {Write-host "Not complete yet, rechecking folders."}

Если все три утверждения верны, то я должен увидеть «Папка успеха и папка« Ошибка »пусты, и файл Watcher существует».

Вместо этого я вижу «Еще не выполнено,перепроверка папок. "независимо от того, каково условие, даже если все три верны.

Ответы [ 2 ]

4 голосов
/ 30 мая 2019

Вам нужно будет позвонить $directoryInfo3.count, чтобы утверждение вылилось в true. i.e.:

PS C:\> $dir = gci c:\temp\ -file | measure
PS C:\> $dir


Count    : 36
Average  :
Sum      :
Maximum  :
Minimum  :
Property :

PS C:\> $dir -eq 36
False
PS C:\> $dir.count -eq 36
True
1 голос
/ 30 мая 2019

Поскольку вас не интересует количество или содержание Get-ChildItem,
, вы можете использовать Test-Path для всех 3 условий

## Q:\Test\2019\05\30\SO_56373080.ps1
$Success =  "C:\temp\Success"       
$Failed  =  "C:\temp\failed"       
$watcher =  "C:\temp\watcher.txt"  

if ( (Test-Path -Path $Watcher   -PathType Leaf) -AND 
    !(Test-Path -Path $Success\* -PathType Leaf) -AND 
    !(Test-Path -Path $Failed\*  -PathType Leaf)){
    Write-host "Success folder and Failed folder are empty, and Watcher file exists."
} else {
    Write-host "Not complete yet, rechecking folders."
}

Здесь ! =Не инвертирует логический результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...