skrypt PowerShell przy zamykaniu nie działa (Win 8)

0

Napisałem skrypt zapasowy w PowerShell. Upoważniłem go do odblokowania pliku, aby można go było uruchamiać bez interakcji.

Użyłem gpedit, aby dodać go do skryptów PowerShell, które będą uruchamiane podczas zamykania systemu.

Chociaż skrypt działa dobrze, wenn jest wykonywany bezpośrednio, ale po prostu nie działa podczas zamykania.

Wyłączyłem szybki rozruch i hibernację zgodnie z opisem w drugiej odpowiedzi na to pytanie, ale nic się nie zmienia.

Jak mogę się dowiedzieć

  • czy mój skrypt nie działa
  • lub skrypt nie jest w ogóle wywoływany
  • i wtf dzieje się podczas zamykania systemu

Dodatek: więcej informacji

  • Skrypt otwiera połączenie sieciowe z serwerem NAS i definiuje dysk sieciowy
  • następnie kopiuje dane lokalne do nowo utworzonego folderu na tym dysku sieciowym, używając daty i godziny jako nazwy folderu
  • po zakończeniu procesu kopiowania dysk sieciowy jest odłączany.
  • Uznałem „przy wyłączeniu” za dobry analogon dla „wykonanej pracy”. Myślę, że podczas celowego wyłączania komputera bardzo prawdopodobne jest, że nastąpi pewien postęp.
  • Nie wiem, czy to najlepszy wybór, aby to zrobić przy wyłączaniu, ale to najlepszy wybór, jaki znam. Być może można to zrobić automatycznie przy każdej zmianie pliku?
  • Użyłem gpedit.msc do zainstalowania skryptu i poszedłem do Computerkonfiguracja-> Ustawienia Windows-> Skrypty-> Zamknij. Tam dodałem skrypt w dedykowanej Tabeli „PowerShell-Scripts”. Zmieniono ustawienia sekwencji, aby skrypty PowerShell były wykonywane jako pierwsze.
  • Skrypt ma ścieżkę lokalną, C: \ Backupsoftware \ Smart_Backup_Create_folders_by_Date_MK.ps1
  • Dane, które należy skopiować, znajdują się na pulpicie oraz w folderze dokumentów określonego konta użytkownika.

Więcej szczegółów Postępowałem zgodnie z sugestiami flolilolilo i dodałem wiersz na początku mojego skryptu, który w zasadzie wykonuje debugowanie printf (czy jest to debugowanie zapisu-wyjścia?). Miejsce, w którym znalazłem wyjściowy plik tekstowy, to

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

Skrypt jest więc najwyraźniej wywoływany, ale nie robi nic poza publikowaniem informacji debugowania. Czy mogę przekierowywać błędy i ostrzeżenia do pliku tekstowego?

Ach, a jak zamontować NAS?

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

Trzecie uzupełnienie

Nadchodzi aktualny kod.

#+-------------------------------------------------------------------+  
#| = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = : = |  
#|{>/-------------------------------------------------------------\<}|           
#|: | 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"  

Moje bieżące dochodzenia pokazują działające wyjście komunikatów debugowania do pliku test.txt. A mkdir zawodzi.

Ariser
źródło
Co właściwie robi skrypt? Dlaczego właśnie „przy wyłączaniu” byłby najlepszym wyborem? Jakich konfiguracji GP używasz w tej konfiguracji? Gdzie skrypt znajduje się dokładnie tak, jak udział / ścieżka do pliku?
Pimp Juice IT
aby dowiedzieć się, czy w ogóle się nazywa: dlaczego po prostu nie zacząć Write-Output "This script was called at $(Get-Date)" | Out-File .\test.txt?
flolilo
@flolilolilo ok, spróbuję tego.
Ariser
@flolilolilo: ciekawy wynik. Za dużo na komentarz. Dołączę to do mojego pytania.
Ariser
1
czy niektóre szczegółowe informacje w formie try- catch(w połączeniu z out-file-commandami) nie pomogłyby w zidentyfikowaniu problemu? coś w stylutry{gci .\; write-output "gci passed!" | out-file test.txt -append;}catch{write-output "gci failed!" | out-file test.txt -append}
flolilo