powershell - Script to run an exe with parameters and catch exit code -
i have import tool has support running in unattended mode. accepts arguments this:
importer.exe -organization "dev" -datafile "e:\importdata.txt" -rightsfile "e:\importrights.txt" -logfile "c:\logfile.log"
now above how tool accepts arguments.
i'm writing ps-script launch tool above parameters.
<# .synopsis executes pwr bulk data importer tool in unattended mode. .description script executes pwr bulk data importer tool in unattended mode. import files: data , rights must supplied , log file must provided. .parameter importtoolexe full path , exe of tool. .parameter organization identifier of organization. .parameter datafile full path , filename of data file. .parameter rightsfile full path , filename of rights file. .parameter logfile full path , filename of log file (will created , if exists, it'll over-writtien). .parameter isforced if true, tool run in override mode omitting deletion warnings. .example executer -importtoolexe "d:\tool\pwr bulk data importer.exe" -organization "vtdev" -datafile "e:\importdata.txt" -rightsfile "e:\importrights.txt" -logfile "c:\logfile.log" executer -importtoolexe "d:\tool\pwr bulk data importer.exe" -organization "vtdev" -datafile "e:\importdata.txt" -rightsfile "e:\importrights.txt" -logfile "c:\logfile.log" -isforced true #> param( [parameter(mandatory = $true, position = 0, valuefrompipelinebypropertyname = $true)] [string]$importtoolexe, [parameter(mandatory = $true, position = 1, valuefrompipelinebypropertyname = $true)] [string]$organization, [parameter(mandatory = $true, position = 2, valuefrompipelinebypropertyname = $true)] [string]$datafile, [parameter(mandatory = $true, position = 3, valuefrompipelinebypropertyname = $true)] [string]$rightsfile, [parameter(mandatory = $true, position = 4, valuefrompipelinebypropertyname = $true)] [string]$logfile, [parameter(mandatory = $false)] [bool]$isforced ) write-output "" write-output "script execute bulk data importer" write-output "" $params = "-organization " + $organization + " -datafile " + $datafile + " -rightsfile " + $rightsfile + " -logfile " + $logfile write-output "debuging" write-output ($importtoolexe + " " + $params) try { write-output " " write-output "executing..." invoke-expression ($importtoolexe + " " + $params) write-output "finished." write-output "checking exit code." } catch [system.exception] { " " "exception while trying execute" write-output $_.exception.gettype().fullname; write-output $_.exception.message; return } { write-output " " } $isimportsuccess = $false if ($lastexitcode -eq 0) { write-output "import successful." $isimportsuccess = $true } else { write-output "import failed." $isimportsuccess = $false } if ($isimportsuccess -eq $true) { try { $smtpserver = "smtp.gmail.com" $smtpclient = new-object net.mail.smtpclient( $smtpserver, 587 ) $smtpclient.enablessl = $true $smtpclient.credentials = new-object system.net.networkcredential( "gmail_username", "gmail_password" ); $emailmessage = new-object system.net.mail.mailmessage $emailmessage.from = $emailfrom foreach ( $recipient in $arry_emailto ) { $emailmessage.to.add( $recipient ) } $emailmessage.subject = $emailsubj $emailmessage.body = $emailbody # have attachments? # if yes, add them, if not, nothing # if ( $arry_emailattachments.count -ne $null ) # { # $emailmessage.attachments.add() # } $emailmessage.attachments.add($logfile) $smtpclient.send( $emailmessage ) } catch [system.exception] { " " "exception while emailing" write-host $_.exception.gettype().fullname; write-host $_.exception.message; return } }
no i'm getting output errors:
script execute bulk data importer debuging d:\tool\pwr bulk data importer.exe -organization vtdev -datafile e:\importdata.txt -rightsfile e:\importrights.txt -logfile c:\logfile.log executing... exception while trying execute system.management.automation.commandnotfoundexception term 'd:\tool\pwr' not recognized name of cmdlet, function, script file, or operable program. check spelling of name, or if path included, verify path correct , try again.
i'm facing bit of learning curve ps , had script reading so far.
i see main issue print debug line: quotes gone already. , manager told me invoke-expression not idea. recommends me use start-something
now i'm stuck. pointer appreciated , there upvotes well.
add -erroraction stop
inside try/catch, should trigger desired action:
try{ ... invoke-expression ($importtoolexe + " " + $params) -erroraction stop ... } catch{ ## catch code }
you can try invoke-command
start exe in scenario replace invoke-expression
following:
invoke-command -scriptblock {&$importtoolexe $args[0]} -argumentlist $params
Comments
Post a Comment