
Creé una tarea con altos privilegios.
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -ExecutionPolicy Bypass -File "D:\OneDrive\OneDrive - HAJJAJ\SCRIPTS\01_Hourl_Stock_From_ERP.ps1"
el script .ps1 utilizado para convertir archivos de xls a xlsx:
# Set the path to the directory containing the Excel files
$sourceDirectory = "D:\OneDrive\OneDrive - HAJJAJ\FTPData\Stock_From_ERP"
# Set the path to the conversion directory
$conversionDirectory = "D:\ConversionZone"
# Set the path to the destination directory where you want to move the converted files
$destinationDirectory = "D:\OneDrive\OneDrive - HAJJAJ\Production\Stock_From_ERP"
# Set the path to the archive directory
$archiveDirectory = "D:\Archive"
# Set the path to the error log file
$errorLogFilePath = "D:\Logs\ConversionErrorLog_$(Get-Date -Format 'yyyyMMdd_HHmmss').txt"
# Set the new filename
$newFilename = "Stock_From_ERP.xlsx"
# Set the new sheet name
$newSheetName = "Stock_From_ERP_Sheet"
# Get a list of all .xls files in the source directory
$xlsFiles = Get-ChildItem -Path $sourceDirectory -Filter *.xls | Sort-Object CreationTime -Descending | Select-Object -First 1
# Loop through each .xls file
foreach ($file in $xlsFiles) {
# Construct the full path to the source file
$sourceFilePath = $file.FullName
# Construct the full path to the conversion file
$conversionFilePath = Join-Path -Path $conversionDirectory -ChildPath $newFilename
try {
# Create a new Excel Application object
$excel = New-Object -ComObject Excel.Application
# Disable alerts and set visible to false to prevent Excel from displaying prompts
$excel.DisplayAlerts = $false
$excel.Visible = $true
# Open the problematic file
$workbook = $excel.Workbooks.Open($sourceFilePath)
# Change the sheet name
$worksheet = $workbook.Worksheets.Item(1)
$worksheet.Name = $newSheetName
# Save the workbook as .xlsx format in the conversion directory
$workbook.SaveAs($conversionFilePath, 51) # 51 represents the XLSX file format
# Close the workbook and Excel application
$workbook.Close()
$excel.Quit()
# Release the COM objects
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel -ErrorAction SilentlyContinue
# Copy the converted file to the destination directory with preserving permissions
Copy-Item -Path $conversionFilePath -Destination $destinationDirectory -Force
# Remove the original file
Remove-Item -Path $sourceFilePath -Force
# Add a waiting time of 5 seconds before moving the source file to the archive directory
Start-Sleep -Seconds 50
# Move the source file to the archive directory
Move-Item -Path $conversionFilePath -Destination $archiveDirectory -Force
} catch {
# Log the error to the error log file
$_.Exception.Message | Out-File -FilePath $errorLogFilePath -Append
Write-Host "Error processing $($file.Name): $_"
continue # Skip processing this file and continue with the next one
}
}
Write-Host "Conversion and move complete."
cuando ejecuto este archivo .bat en modo normal (incluso sin ejecutarlo como administrador), ejecuta el código sin problemas, pero cuando lo ejecuto usando el Programador de tareas aparece el siguiente error:
Microsoft Excel no puede acceder al archivo 'D:\OneDrive\OneDrive - HAJJAJ\FTPData\Stock_From_ERP\INVIRSIQNZ_528800221_1.xls'. Hay varias razones posibles:
• El nombre del archivo o la ruta no existe. • El archivo está siendo utilizado por otro programa. • El libro que está intentando guardar tiene el mismo nombre que un libro abierto actualmente.