Estou perplexo. Estou executando o código abaixo em uma caixa 2012 R2 enquanto o desenvolvo. Tudo o que essa peça faz é obter o nome do host, pegar o número do final, executar uma função para ver se é ímpar ou par e, em seguida, definir o local de armazenamento com base nisso.
Por alguma razão, depois que a instrução If retorna o valor, o script simplesmente para de ser executado como se o script tivesse terminado. Como você pode ver, adicionei write-debug "mensagem 3" e ele simplesmente nem mesmo é registrado. Alguém sabe de alguma pegadinha do PS para um cenário como esse? Ou será que cometi algum erro em algum lugar. O servidor está executando o WMF 4.0.
function check-oddOrEven($number)
{
If([bool]!($number%2))
{
$OddEvnResult = "Even"
return $OddEvnResult
}
Else
{
$OddEvnResult = "Odd"
return $OddEvnResult
}
}
Write-Debug "message1" -debug
$oddStrgPath = "C:\ClusterStorage\Volume1"
$evnStrgPath = "C:\ClusterStorage\Volume2"
$hostname = $env:computername
#$hostname = "testN02"
$OddEvnSplit = $hostname.split('N')[1]
Write-Debug "message2" -debug
$OddEvnResult = check-oddOrEven $OddEvnSplit
if ($OddEvnResult -eq "Odd")
{
write-host "Odd number in hostname detected (1,3,5..etc). Setting storage path to" $oddStrgPath
#set-vmhost -VirtualHardDiskPath $oddStrgPath -VirtualMachinePath $oddStrgPath
$OEresult= $oddStrgPath
return $OEresult
}
else
{
write-host "Even number in hostname detected (2,4,6..etc). Setting storage path to" $evnStrgPath
#set-vmhost -VirtualHardDiskPath $evnStrgPath -VirtualMachinePath $oddStrgPath
$OEresult= $evnStrgPath
return $OEresult
}
Write-Debug "message3" -debug
Eu tentei write-host e write-output sem sucesso também. Aqui está a saída do console:
DEBUG: message1
DEBUG: message2
Even number in hostname detected (1,3,5..etc). Setting storage path to C:\ClusterStorage\Volume2
C:\ClusterStorage\Volume2
Responder1
Por favor leiaesta postagem do StackOverflowsobre a declaração de 'retorno'. Aqui está o resumo:
Retornar: Isso vairetornar ao ponto de chamada anterior. Se você chamar este comando a partir de um script (fora de qualquer função), ele retornará ao shell. Se você chamar este comando a partir do shell, ele retornará ao shell (que é o ponto de chamada anterior para um único comando executado a partir do shell). Se você chamar este comando a partir de uma função, ele retornará para o local de onde a função foi chamada.
A execução de quaisquer comandos após o ponto de chamada para o qual ele retorna continuará a partir desse ponto. Se um script for chamado a partir do shell e contiver o comando Return fora de qualquer função, quando ele retornar ao shell não haverá mais comandos para executar, tornando assim um Return usado dessa forma essencialmente igual a Exit.
Então,você tem que remover a declaração de retorno do seu 'if' e 'else', deixando apenas a variável para exibir seu conteúdo.
Exemplo:
if ($OddEvnResult -eq "Odd")
{
write-host "Odd number in hostname detected (1,3,5..etc). Setting storage path to" $oddStrgPath
#set-vmhost -VirtualHardDiskPath $oddStrgPath -VirtualMachinePath $oddStrgPath
$OEresult= $oddStrgPath
$OEresult
}
else
{
write-host "Even number in hostname detected (2,4,6..etc). Setting storage path to" $evnStrgPath
#set-vmhost -VirtualHardDiskPath $evnStrgPath -VirtualMachinePath $oddStrgPath
$OEresult= $evnStrgPath
$OEresult
}