script powershell no desligamento não funciona (ganha 8)

0

Eu escrevi um script de backup no powershell. Eu autorizei com Unblock-File, para que possa ser executado sem ter que interagir.

Eu usei o gpedit para adicioná-lo aos scripts do PowerShell para serem executados no desligamento.

Enquanto o script funciona bem quando executado diretamente, ele simplesmente não é executado no desligamento.

Desativei a inicialização rápida e a hibernação, conforme descrito na segunda resposta do esta pergunta mas nada muda.

Como posso descobrir

  • se meu script falhar
  • ou o script não é chamado
  • e wtf acontece durante o desligamento

Adendo: mais informações

  • O script abre uma conexão de rede para um NAS e define uma unidade de rede
  • copia os dados locais para uma pasta recém-criada nessa unidade de rede, usando a data e a hora como nome da pasta
  • após a conclusão do processo de cópia, a unidade de rede é desconectada.
  • Eu considerei "no desligamento" como um bom analogon para "algum trabalho feito". Eu acho que quando desligar o computador intencionalmente, é provável que algum progresso tenha acontecido.
  • Eu não sei se é a melhor escolha para fazer isso no desligamento, mas é a melhor escolha que eu conheço. Talvez isso possa ser feito em cada mudança de um arquivo automagicamente?
  • Usei o gpedit.msc para instalar o script e fui para o Computerkonfiguration- > Windows-Settings- > Scripts- > Shutdown. Lá eu adicionei o script no quadro "PowerShell-Scripts" dedicado. Alterei as configurações de sequência para que os scripts do PowerShell sejam executados primeiro.
  • O script tem um caminho local, C: \ Backupsoftware \ Smart_Backup_Create_folders_by_Date_MK.ps1
  • Os dados que devem ser copiados estão na área de trabalho e na pasta de documentos de uma determinada conta de usuário.

Mais detalhes Eu segui as sugestões do flolilolilo e adicionei uma linha no início do meu script, que basicamente faz alguns printf-debug (ou é Write-Output-Debug?). O lugar onde encontrei o arquivo de saída de texto foi

C:\Windows\System32\GroupPolicy\Machine\Scripts\Shutdown

Portanto, o script aparentemente é chamado, mas não faz nada além de colocar as informações de depuração. Posso redirecionar erros e avisos para um arquivo de texto?

Ah, e como montei o NAS?

New-PSDrive -Name "backup" -PSProvider Filesystem -Root "\169.254.100.100\share"

Terceiro Adendo

Aí vem o código atual.

#+-------------------------------------------------------------------+  
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = |  
#|{>/-------------------------------------------------------------\<}|           
#|: | Authors:  Aman Dhally; ariser                               | :|           
#| :| Email:   [email protected]
#|: | Purpose: Smart Backup and create folder by Date       
#| :|          
#|: |               Date: 29 November 2011 - 2017
#|: |                            
#| :|   /^(o.o)^\    Version: n.a.                                |: | 
#|{>\-------------------------------------------------------------/<}|
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = |
#+-------------------------------------------------------------------+


#System Variable for backup Procedure

# $date = Get-Date -Format d.MMMM.yyyy
$date = Get-Date -Format yyyy.MM.dd.HH.mm.ss

Write-Output "This script was called at %(Get-Date)" | Out-File .\test.txt
 New-PSDrive -Name "backup" -PSProvider Filesystem -Root "\169.254.100.100\Krautlight_aktiv"

 # $source = "D:\Tally\Data\"
$destination = "backup:\$date"
 # $path = test-Path $destination

$homeprefix= "C:\Users\MyUser\"

$directories = @{ }
$directories.add($homeprefix+"Documents\eagle", "EDA\eagle")
$directories.add($homeprefix+"Documents\KL\Eaglelibraries", "EDA\eigeneLibraries")
$directories.add($homeprefix+"Desktop\Flansch", "CAD\Flansch")
$directories.add($homeprefix+"Desktop\BoCubeDateien", "CAD\Bopla")
try{
  mkdir $destination
  ; write-outpot "mkdir passsed"  | out-file .\test.txt -append;
  }
catch
    { write-output "mkdir  failed" | out-file .\test.txt -append }
ForEach($source in $directories.KEYS.GetEnumerator()) 
{
        cd backup:\          
        $destpath=$destination+'\'+$directories.Get_Item($source)
       Copy-Item  -Path $source -Destination $destpath -Recurse 
        cd c:\
}
 Remove-PSDrive "Backup"  

Minhas investigações atuais mostram uma saída funcional de mensagens de depuração para o arquivo test.txt. E o mkdir falha.

    
por Ariser 14.10.2017 / 20:36

0 respostas