Impossibile creare un oggetto COM in uno script PowerShell in esecuzione come attività pianificata


1

Ho uno script PowerShell che sto cercando di eseguire come attività pianificata. Il suo scopo è eseguire un'esportazione notturna da un database di Access, quindi caricare i file flat esportati in una destinazione SFTP. Lo script funziona correttamente quando lo eseguo manualmente, ma quando provo a eseguirlo come attività pianificata, non riesce. Ho ridotto il problema a un errore nella creazione di un oggetto COM.

Quello che sto vedendo

Ho fatto un po 'di registrazione su questo, e penso di sapere cosa sta succedendo; Non so proprio come ripararlo.

La linea offensiva nel mio script PowerShell è $Access = New-Object -ComObject Access.Application. Quando eseguo manualmente lo script, il mio oggetto COM Access viene creato correttamente. $Accessè di tipo Microsoft.Office.Interop.Access.ApplicationClass, come mi aspetterei.

Se lo eseguo come un'attività pianificata, in esecuzione con le mie autorizzazioni, l'oggetto COM non viene creato; $Accessviene restituito come $null, il che provoca il fallimento di qualsiasi chiamata di metodo a quell'oggetto.

Io posso ottenere l'oggetto COM creato con successo controllando "Corri con i privilegi più elevati" nel Utilità di pianificazione, ma questo crea un altro problema. Il mio database di Access utilizza tabelle collegate su una condivisione di rete e, eseguendo come amministratore locale, perdo l'accesso a tali tabelle perché non sono più un utente di dominio.

La mia domanda

Qualcuno sa perché non riesco a creare un oggetto COM durante l'esecuzione come attività pianificata con le mie credenziali? C'è qualche soluzione per questo?

In caso contrario, qualche suggerimento per risolvere il mio problema con le autorizzazioni? Sembra di essere in un Catch-22 qui; l'unico modo per creare correttamente il mio oggetto COM è utilizzare le credenziali che causano il fallimento del resto del mio script.


2
Questa risposta è per Excel, ma può aiutare la tua situazione con Access anche stackoverflow.com/a/13369587/291709 Inoltre, assicurati di leggere l'articolo KB sulle considerazioni sul lato server per l'automazione dell'ufficio support.microsoft.com/kb/ 257757 Le applicazioni di Office presuppongono un ambiente desktop, pertanto l'esecuzione come attività pianificata durante la disconnessione può causare problemi.
Rynant,

Grazie per l'avviso. Dopo aver letto l'articolo KB, posso prendere in considerazione un modo alternativo per farlo.
Jeff Rosenberg,

puoi non mappare un'unità sulla condivisione di rete nel tuo script (comprese le credenziali dell'utente) in modo che il sistema locale possa impersonarti mentre non sei collegato. Forse hai solo bisogno di if test-path = falseun'istruzione seguita da un net use \\mysharecomando per mapparlo.
Knuckle-Dragger,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.