Scheduled script does not redirect output to file
<p>I've two similar PowerShell scripts to backup files (first purges a network drive, second does actual backup) configured to run daily in the same Windows scheduler task (just different actions):</p>

<pre><code>Action: Start a program
Program/script: powershell.exe
Add arguments (optional): -command C:\Webs\Scripts\purgar-backups-dinahosting.ps1 &gt; C:\Webs\Scripts\purgar-backups-dinahosting.log 2&gt;&amp;1

Action: Start a program
Program/script: powershell.exe
Add arguments (optional): -command C:\Webs\Scripts\backup-dynahosting.ps1 &gt; C:\Webs\Scripts\backup-dynahosting.log 2&gt;&amp;1
</code></pre>

<p>I get the expected log files but the first one is always empty (0 bytes). I do get actual output if I simply run the command from command prompt:</p>

<pre><code>powershell.exe -command C:\Webs\Scripts\purgar-backups-dinahosting.ps1 &gt; C:\Webs\Scripts\purgar-backups-dinahosting.log 2&gt;&amp;1
</code></pre>

<p>... with the only peculiarity that it uses <strong>Unix line feeds</strong> (:-!). Given that:</p>

<ol>
<li>Both scripts are saved with Windows line feeds</li>
<li>Both scripts generate output with <code>Write-Host</code></li>
</ol>

<p>What can explain those oddities in the first script<sup>1</sup>?</p>

<p>(<sup>1</sup>) Here's the code:</p>

<pre><code>$LetraUnidad = "X:"

$RecursoNFS = "xxx_removed_xxx.dinaserver.com:/usr/containers/xxx_removed_xxx"

$EspacioContratado = "xxx_removed_xxx"

$LimitePorcentaje = "xxx_removed_xxx"



Write-Host "Verificando si ya está montada la unidad de red en $LetraUnidad..."
$UnidadRed = New-Object System.IO.DriveInfo($LetraUnidad)
if ($UnidadRed.IsReady)
{
    Write-Host "Unidad de red disponible"
}
else
{
    Write-Host "Unidad de red no disponible, montando unidad..."
    net use $LetraUnidad $RecursoNFS

    if ($UnidadRed.IsReady)
    {
        Write-Host "Unidad de red disponible"
    }
    else
    {
        Write-Host "Se ha producido un error al intentar montar la unidad de red"
        exit
    }    
}



Write-Host "Obteniendo datos de espacio de la unidad $LetraUnidad..."

$EspacioOcupado = ((Get-ChildItem $LetraUnidad -Recurse | Measure-Object -property length -sum).sum) /1gb
$EspacioLibre = $EspacioContratado-$EspacioOcupado
$PorcentajeEspacioOcupado = ($EspacioOcupado*100/$EspacioContratado)


Write-Host "Espacio total:        " ([System.Math]::Round($EspacioContratado, 2)) " GB"
Write-Host "Espacio libre:        " ([System.Math]::Round($EspacioLibre, 2)) " GB"
Write-Host "Espacio ocupado:      " ([System.Math]::Round($EspacioOcupado, 2)) " GB"
Write-Host "Porcentaje ocupación: " ([System.Math]::Round($PorcentajeEspacioOcupado, 2))"%"
Write-Host

Write-Host "Comprobando si es necesario eliminar archivos..."
if($PorcentajeEspacioOcupado -gt $LimitePorcentaje)
{
    Write-Host "Poco espacio disponible, eliminando archivos..."
}
else
{
    Write-Host "Espacio disponible suficiente, no es necesario eliminar archivos"
    exit
}



foreach ($file in Get-ChildItem -path X: | where-object{-not $_.PSIsContainer} | sort -property LastWriteTime)
{
    Write-Host "Eliminando " $file.FullName
    del $file.FullName

    $EspacioOcupado = ((Get-ChildItem $LetraUnidad -Recurse | Measure-Object -property length -sum).sum) /1gb
    $EspacioLibre = $EspacioContratado-$EspacioOcupado
    $PorcentajeEspacioOcupado = ($EspacioOcupado*100/$EspacioContratado)

    if($PorcentajeEspacioOcupado -lt $LimitePorcentaje)
    {
        Write-Host
        exit
    }
}
</code></pre>