我有兩個類似的PowerShell腳本備份文件(第一清除網絡驅動器,第二次卻實際備份),配置爲同一個Windows調度任務(只是不同的動作)每天運行:預定腳本不重定向輸出到文件
Action: Start a program
Program/script: powershell.exe
Add arguments (optional): -command C:\Webs\Scripts\purgar-backups-dinahosting.ps1 > C:\Webs\Scripts\purgar-backups-dinahosting.log 2>&1
Action: Start a program
Program/script: powershell.exe
Add arguments (optional): -command C:\Webs\Scripts\backup-dynahosting.ps1 > C:\Webs\Scripts\backup-dynahosting.log 2>&1
我得到預期的日誌文件,但第一個總是空的(0字節)。我得到實際的輸出,如果我只是從命令提示符下運行命令:
powershell.exe -command C:\Webs\Scripts\purgar-backups-dinahosting.ps1 > C:\Webs\Scripts\purgar-backups-dinahosting.log 2>&1
...與它使用Unix的換行符唯一的特點(: - )。鑑於:
- 兩個腳本保存在Windows換行符
- 兩個腳本生成
Write-Host
輸出,怎麼能在第一個腳本解釋這些古怪?
()下面的代碼:
$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
}
}
CMD解釋'>'和'2>&1'作爲重定向操作符,並通過自身處理它們,並且不把它們傳遞給PowerShell的。任務調度程序將參數解釋爲文字字符串。因此,'>'和'2>&1'將被傳遞給PowerShell,並且將由PowerShell處理。 PowerShell知道,主機流不應該被'>'運算符重定向。 – PetSerAl
@PetSerAl感謝您的支持。我從來沒有真正理解爲什麼或何時需要在三個(小)文本框中分割我的動作;這些設置實際上是一些谷歌搜索狩獵的結果。運行* .ps1並將其輸出發送到文件的正確方法是什麼? –
的一種方式,它不需要你修改腳本是:*程序:*'cmd'和*參數:*'/ C的powershell -command C:\站點\腳本\備份dynahosting.ps1> C:\站點\ Scripts \ backup-dynahosting.log 2>&1'。 – PetSerAl