Goedemorgen,
Ik heb een apart probleem met een PowerShell wat ik wil gebruiken.
Het powershell script moet .csv bestanden omzetten naar .xlsx bestanden.
Het script wat ik heb werkt wanneer ik het gewoon zelf opstart, dan worden de bestanden omgezet van .csv naar .xlsx, en krijg ik daarna een email.
Maar ik wil het via Windows geplande taken automatisch uitvoeren dus ik heb een nieuwe taak aangemaakt en wanneer ik het script dan uitvoer dan wordt mijn powershell script wel opgestart en doorlopen alleen er worden geen .csv bestanden omgezet naar .xlsx bestanden. Wel krijg ik een mail aan het einde dat de omgezet gedaan is. Dus mijn script wordt uitgevoerd alleen niet helemaal.
Kan iemand mij misschien de gouden tip geven waar dit fout gaat?
Hieronder mijn powershell script (ik heb het al getest via het UNC pad en via de netwerkdriveletter maar beide opties geven hetzelfde en werken niet via geplande taken (behalve het email bericht versturen)
En het convertcsv-toexcel.ps1 bestand ziet er zo uit:
Ik heb een apart probleem met een PowerShell wat ik wil gebruiken.
Het powershell script moet .csv bestanden omzetten naar .xlsx bestanden.
Het script wat ik heb werkt wanneer ik het gewoon zelf opstart, dan worden de bestanden omgezet van .csv naar .xlsx, en krijg ik daarna een email.
Maar ik wil het via Windows geplande taken automatisch uitvoeren dus ik heb een nieuwe taak aangemaakt en wanneer ik het script dan uitvoer dan wordt mijn powershell script wel opgestart en doorlopen alleen er worden geen .csv bestanden omgezet naar .xlsx bestanden. Wel krijg ik een mail aan het einde dat de omgezet gedaan is. Dus mijn script wordt uitgevoerd alleen niet helemaal.
Kan iemand mij misschien de gouden tip geven waar dit fout gaat?
Hieronder mijn powershell script (ik heb het al getest via het UNC pad en via de netwerkdriveletter maar beide opties geven hetzelfde en werken niet via geplande taken (behalve het email bericht versturen)
code:
1
2
3
4
5
| cd "C:\Script\csv-hernoemer" . .\ConvertCSV-ToExcel.ps1 ConvertCSV-ToExcel -inputfile "F:\Data overzichten\Dump\CSV\Bestand output1.csv" -output "S:\Data overzichten\Dump\Bestand output1.xlsx" ConvertCSV-ToExcel -inputfile "\\servernaam\Data overzichten\Dump\CSV\Bestand output1.csv" -output "\\servernaam\Data overzichten\Dump\Bestand output1.xlsx" |
En het convertcsv-toexcel.ps1 bestand ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
| Function Release-Ref ($ref) { ([System.Runtime.InteropServices.Marshal]::ReleaseComObject( [System.__ComObject]$ref) -gt 0) [System.GC]::Collect() [System.GC]::WaitForPendingFinalizers() } Function ConvertCSV-ToExcel { <# .SYNOPSIS Converts one or more CSV files into an excel file. .DESCRIPTION Converts one or more CSV files into an excel file. Each CSV file is imported into its own worksheet with the name of the file being the name of the worksheet. .PARAMETER inputfile Name of the CSV file being converted .PARAMETER output Name of the converted excel file .EXAMPLE Get-ChildItem *.csv | ConvertCSV-ToExcel -output 'report.xlsx' .EXAMPLE ConvertCSV-ToExcel -inputfile 'file.csv' -output 'report.xlsx' .EXAMPLE ConvertCSV-ToExcel -inputfile @("test1.csv","test2.csv") -output 'report.xlsx' .NOTES Author: Boe Prox Date Created: 01SEPT210 Last Modified: #> #Requires -version 2.0 [CmdletBinding( SupportsShouldProcess = $True, ConfirmImpact = 'low', DefaultParameterSetName = 'file' )] Param ( [Parameter( ValueFromPipeline=$True, Position=0, Mandatory=$True, HelpMessage="Name of CSV/s to import")] [ValidateNotNullOrEmpty()] [array]$inputfile, [Parameter( ValueFromPipeline=$False, Position=1, Mandatory=$True, HelpMessage="Name of excel file output")] [ValidateNotNullOrEmpty()] [string]$output ) Begin { #Configure regular expression to match full path of each file [regex]$regex = "^\w\:\\" #Find the number of CSVs being imported $count = ($inputfile.count -1) #Create Excel Com Object $excel = new-object -com excel.application #Disable alerts $excel.DisplayAlerts = $False #Show Excel application $excel.Visible = $False #Add workbook $workbook = $excel.workbooks.Add() ##Remove other worksheets #$workbook.worksheets.Item(2).delete() ##After the first worksheet is removed,the next one takes its place #$workbook.worksheets.Item(2).delete() #Define initial worksheet number $i = 1 } Process { ForEach ($input in $inputfile) { #If more than one file, create another worksheet for each file If ($i -gt 1) { $workbook.worksheets.Add() | Out-Null } #Use the first worksheet in the workbook (also the newest created worksheet is always 1) $worksheet = $workbook.worksheets.Item(1) #Add name of CSV as worksheet name $worksheet.name = "Tab1" #Open the CSV file in Excel, must be converted into complete path if no already done If ($regex.ismatch($input)) { $tempcsv = $excel.Workbooks.Open($input) } ElseIf ($regex.ismatch("$($input.fullname)")) { $tempcsv = $excel.Workbooks.Open("$($input.fullname)") } Else { $tempcsv = $excel.Workbooks.Open("$input") } $tempsheet = $tempcsv.Worksheets.Item(1) #Copy contents of the CSV file $tempSheet.UsedRange.Copy() | Out-Null #Paste contents of CSV into existing workbook $worksheet.Paste() #Close temp workbook $tempcsv.close() #Select all used cells $range = $worksheet.UsedRange #Autofit the columns $range.EntireColumn.Autofit() | out-null $i++ } } End { #Save spreadsheet $workbook.saveas("$output") #Close Excel $excel.quit() #Release processes for Excel $a = Release-Ref($range) #Email dat de het bestand is omgezet van .csv naar .xslx #input bestandsnaam achterhalen $inputPath = "$inputfile" $inputPathFile = Split-Path $inputPath -leaf #output bestandsnaam achterhalen $outputPath = "$output" $outputPathFile = Split-Path $outputPath -leaf Send-MailMessage -From "afzender" -To "ontvanger" -Subject "$inputPathFile omgezet naar $outputPathFile" -Body "Het volgende bestand:<br><i>$inputfile</i><br>is omgezet naar:<br><b>$output</b>" -BodyAsHtml -SmtpServer "emailserver" } } |