Sou relativamente novo no PowerShell e estou tentando fazer uma lógica de codificação básica "Criar arquivo temporário" "Verificar se existe arquivo temporário" "Se ArquivoExistir = Verdadeiro/Falso" e estou claramente perdendo algo, pois não estou ficando consistente resultados.
Aqui está o que tenho até agora, e o problema parece ser que $TmpFileExists
não está sendo atualizado quando "reexecutado" (está sendo executado novamente?)
Espero que a segunda execução da instrução IF retorne a parte ELSE, mas ela retorna apenas "TRUE".
$TmpFile = New-Item -Path "$env:TEMP\jobrunning.log" -ItemType File
$TmpFileExists = (Test-Path $TmpFile) | Out-String
$DelTmpFile = Remove-Item $TmpFile -ErrorAction SilentlyContinue
IF ($TmpFileExists = "True") {$DelTmpFile ; $TmpFileExists } ELSE {Write-Host "File NOT Found"}
IF ($TmpFileExists = "True") {$DelTmpFile ; $TmpFileExists } ELSE {Write-Host "File NOT Found"}
A ideia é, se encontrar o arquivo, excluí-lo, redefinir/verificar o booleano TmpFileExists
e executar novamente a instrução If agora deve retornar a ELSE/FALSE
instrução.
Analisando linha por linha:
Até agora tudo bem. Você criou seu arquivo.
$TmpFileExists agora tem um valor de string de "True" que não mudará sem reatribuição ou outra manipulação . Fazer referência a uma variável não reavalia sua expressão de atribuição. Você deve colocar
Test-Path
em linha ou definir uma função.Agora você excluiu o arquivo referenciado por
$TmpFile
. Seu código subsequente parece assumir que é uma função simples. O varialbe$DelTmpFile
tem um valor de$Null
.Essas expressões, como observou HelpingHand, estão reatribuindo o valor de string de "Ttue". Qualquer expressão de atribuição não nula bem-sucedida será avaliada
$True
quando convertida como booleana. Traduzindo assim, essas expressões se reduzem a:Tornando (espero) óbvio por que sua
Else
cláusula nunca é executada.Exemplo de trabalho:
Como a resposta de @Keith Miller explicou, eu estava tentando fazer referência a uma variável esperando que ela "reavaliasse". Decidi intuitivamente usar funções e fazer tudo funcionar. Aqui está o que acabei, mas não é 100% o mesmo, pois não criei um trecho "If Else" "Delete File", mas foi principalmente um exercício de aprendizado e estou confiante em minha compreensão agora .
Resultado: