Quando executado como uma tarefa agendada, não é possível salvar uma pasta de trabalho do Excel ao usar o objeto Excel.Application COM no PowerShell

2

Estou com um problema em que automatizei a criação de um objeto COM do Excel.Application, adicionei alguns dados a uma pasta de trabalho e salvei o documento como um xlsx.

Isso funciona bem se:

  • Eu já estou no host interativo do Powershell e ou executo cada comando em sequência ou executo como um ps1.
  • Eu corro do cmd.exe, usando o sintaxe: powershell.exe -command "c: \ caminho \ para \ powershellscript.ps1"
  • Eu crio uma tarefa agendada no Windows 7 / Server 2008 R2, use o acima powershell.exe - sintaxe de comando e use o modo "Executar somente quando o usuário está conectado ".

Ele falha quando modifico a mesma tarefa agendada, mas defina como " executado se o usuário está conectado ou não ".

Aqui está um exemplo de script que ilustra o problema que estou tendo:

$Excel = New-Object -Com Excel.Application
$Excelworkbook = $Excel.Workbooks.Add()
$excelworkbook.saveas("C:\temp\test.xlsx")
$excelworkbook.close()

Eu tenho uma teoria de que o objeto COM falha de alguma forma se o meu perfil não for carregado / se não for executado em uma janela de comando.

Alguma idéia de quais opções escolher ao criar a tarefa agendada, ou quais opções usar ao criar o objeto Excel ou usar a função SaveAs ()? Alguém pode reproduzir isso? Eu consegui ver esse comportamento em uma máquina do Server 2008 R2 e no Windows 7. Não tentei outras plataformas.

    
por Daniel Richnak 06.05.2011 / 00:15

2 respostas

3

Você está tentando executar isso quando não está conectado? Em caso afirmativo, eu diria a você neste artigo da Microsoft KB algumas causas prováveis: Considerações sobre a automação do Office no servidor . O título diz server-side , mas o artigo também especifica que isso se aplica a versões cliente do Windows não executadas na sessão interativa com um perfil de usuário carregado.

Se você quiser que isso seja executado sem que um usuário esteja conectado (com a opção que você descreve, parece que você faz), em última análise, não tenho certeza se você conseguirá corrigir o problema para o razões descritas no artigo. Se você só precisa que ele seja executado quando estiver logado, simplesmente não escolhe essa opção?

    
por 06.05.2011 / 00:46
6

Eu fui queimado por isso e não quis reescrever o código. Eu vi o seu post e vários outros que me fizeram desistir. No entanto, minha persistência valeu a pena. Eu estava tentando fazer com que Jenkins fizesse um script para inventariar nosso ambiente de produção e enviá-lo para o Excel. Eu não queria um documento de texto porque eu estava destacando as versões de software que não correspondiam no RED, então precisava do Excel.

Aqui está a resposta que funcionou para mim:

You have to create a folder (or two on a 64bit-windows):

(64Bit, sempre)

C:\Windows\System32\config\systemprofile\Dektop

(32 bits)

C:\Windows\SysWOW64\config\systemprofile\Desktop

Link que alguém forneceu como fonte:

http://www.patton-tech.com/2012/05/printing-from-scheduled-task-as.html

Minha fonte foi:

http://social.technet.microsoft.com/Forums/en/winserverpowershell/thread/aede572b-4c1f-4729-bc9d-899fed5fad02

    
por 13.11.2012 / 22:58