Планировщик задач Visual Cron и Windows, выполняющий скрипт powershell с неожиданными результатами - PullRequest
0 голосов
/ 17 мая 2018

Я предвосхищу это, сказав, что я на самом деле не в высшем эшелоне программирования, будь то PowerShell или другие, поэтому, пожалуйста, поймите, мой код работает, чтобы делать то, что мне нужно. Или до этого месяца.

$uri = 'https://playbook2.domain.com/data/folder/export/24125'
$of = '\\domain.com\dept\DCGSI\Extracts\DCCD Projects.xlsx'
$sf = '\\domain.com\dept\DCGSI\Extracts\DCCD Modified.csv'

function Get-Data {
wget $uri -outfile $of -UseDefaultCredentials
}

function CSV-Creation {
if (Test-Path $sf) {
    Remove-Item $sf
    }

$excel = New-Object -ComObject "Excel.Application"
$Workbook = $excel.Workbooks.Open($of)
$page = 'Project Summary'
$ws = $Workbook.worksheets | where-object {$_.Name -eq $page}
Start-Sleep 5
$cells=$ws.Cells
$range = $ws.UsedRange
$rows = $range.Rows.Count
$dataDate = (Get-Date).tostring("yyyy-MM-dd")
$cols = $range.Columns.Count 
$newCol = $cols + 1
$ws.Cells(1, $newCol).Value = "Snapshot"

for($i = 2; $i -ne $rows+1; $i++){
    $ws.Cells($i, $newCol).Value="$dataDate"
    $ws.Cells($i, $newCol).NumberFormat="yyyy-mm-dd"
}

$excel.visible = $true

$excel.DisplayAlerts = $false

$excel.ActiveWorkbook.SaveAs('\\domain.com\dept\DCGSI\Extracts\DCCD Modified.csv',6)

Close-Excel

}

function Close-Excel {

Start-Sleep 1

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($ws)|out-null
$ws=$null

Start-Sleep 1

[System.Runtime.InteropServices.Marshal]::ReleaseComObject($Workbook)|out-null
$Workbook=$null

Start-Sleep 1

$excel.Quit()

Start-Sleep 1

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)|out-null
$excel=$null

[GC]::Collect()
[GC]::WaitForPendingFinalizers()
}

function Clean-Dates {

(Get-Content $sf) | Foreach-Object {$_ -replace '(\d{1,2})/(\d{1,2})/(\d{4})', '$3-$1-$2'} | Set-Content $sf

}

function Clean-Downloads {
Remove-Item $of
}

Get-Data
CSV-Creation
Clean-Dates
Clean-Downloads

Теперь этот скрипт, когда запускается через powershell, щелкая правой кнопкой мыши или открывается в ISE и запускает, приводит к ожидаемому выводу файла csv.

Исходный WGET дает файл Excel размером ~ 16 КБ, а результирующий csv - ~ 21 КБ. Точное соответствие содержимого не выдерживает, проверка данных на уровне просмотра, а не просто скимминга, кажется, показывает все это там после того, как скрипт завершен с powershell или powershell ise.

подключение этого к визуальному cron или планировщику задач, так как примерно 5/10/2016 приводит к пустому файлу csv; 1KB. Я не внес никаких изменений в сценарий между тем и сейчас. Я не внес никаких изменений в Excel, о которых мне известно, и происходили только регулярные обновления Windows в соответствии с требованиями компании.

Первый вопрос: что я могу проверить, чтобы выяснить, почему это приводит к пустым файлам, так как он выполняется нормально в самой powershell.

Далее, я делаю что-то настолько вопиющее в своем коде, что это может вызывать подобные вещи? Если да, то в каком разделе, по вашей оценке, я должен сосредоточиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...