Я предвосхищу это, сказав, что я на самом деле не в высшем эшелоне программирования, будь то 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.
Далее, я делаю что-то настолько вопиющее в своем коде, что это может вызывать подобные вещи? Если да, то в каком разделе, по вашей оценке, я должен сосредоточиться?