2010-01-15 20 views

Odpowiedz

20

pomocą Harmonogramu zadań systemu Windows i uruchomić skrypt tak:

powershell -File myScript.ps1 -WindowStyle Hidden 

Ponadto utworzyć skrypt, który działa w ramach określonego konta użytkownika, a nie tylko wtedy, gdy że użytkownik jest zalogowany. W przeciwnym razie zobaczysz okno konsoli.

+0

Teraz, ale jak uruchomić Power Shell w tle? – magol

+0

@magol - Ile więcej "tła" musisz zdobyć? Harmonogram zadań systemu Windows określa sposób uruchamiania zadania "w tle", w którym to przypadku zadaniem byłoby uruchomienie PowerShell i uruchomienie określonego skryptu. –

+1

Cóż, aby być uczciwym, początkowa odpowiedź nie spowodowałaby procesu w tle, jeśli bieżący użytkownik jest administratorem i nie zmienia domyślnych ustawień zadania. Jednak jawne zezwolenie na to zadanie, niezależnie od zalogowanego użytkownika, naprawia to. Hm. Mój skrypt testowy działał dotychczas 181 razy.Znowu powinienem wyłączyć to zadanie :-) – Joey

15

Być może ten scenariusz wystarczy. Nie uruchamiamy programu PowerShell co minutę (jest to drogie, BTW). Zamiast tego uruchamiamy go raz, wywołując dodatkowy skrypt, który wywołuje skrypt roboczy raz na minutę (lub faktycznie czeka minutę po tym, jak skrypt roboczy zakończy działanie lub się nie powiedzie).

Tworzenie startowego Invoke-MyScript.ps1:

for(;;) { 
try { 
    # invoke the worker script 
    C:\ROM\_110106_022745\MyScript.ps1 
} 
catch { 
    # do something with $_, log it, more likely 
} 

# wait for a minute 
Start-Sleep 60 
} 

Uruchom to z Cmd (np starcie pliku .bat):

start /min powershell -WindowStyle Hidden -Command C:\ROM\_110106_022745\Invoke-MyScript.ps1 

Pojawi się okno PowerShell przez chwilę, ale jest zminimalizowany z powodu start /min i za chwilę zostaje ukryty na zawsze. Tak więc w rzeczywistości pojawia się tylko ikona paska zadań, a nie samo okno. Nie jest aż tak źle.

1

Te odpowiedzi są histeryczne! Jeśli chcesz uruchomić skrypt powershell jako zadanie w tle spróbować rozpoczęcie pracy. \ Skrypt z CLI w folderze skryptów w domu.

9

Zaplanuj zadanie, aby być uruchamiane jako System. Komenda poniżej zaplanuje skrypt do uruchomienia w tle bez pokazywania okna konsoli PowerShell:

schtasks /create /tn myTask /tr "powershell -NoLogo -WindowStyle hidden -file myScript.ps1" /sc minute /mo 1 /ru System

/ru przełącznik pozwala zmienić kontekst użytkownika, w którym zaplanowane zadanie zostanie wykonane.

+0

Dzięki Xemlock! W moim przypadku Twoja sugestia była jedynym rozwiązaniem, które nie generowało absolutnie żadnego okna PowerShell. – WebFixItMan

2

Na karcie [Ogólne] we właściwościach Harmonogramu zadań dla zadania, zaznaczenie pola wyboru "Uruchom, czy użytkownik jest zalogowany, czy nie", zapobiega wyświetlaniu się okna na komputerze z systemem Windows 7.

1

Jeśli chcesz uruchomić skrypt automatycznie w przedziale czasu. (Dla systemu operacyjnego Windows)

1) Open Schedule tasks from control panel. 
2) Select Task Scheduler Library from left side window. 
3) select Create Task from right side window. 
4) Enter Name in General tab (any name). 
5) Open Triggers tab -> New 
6) Select interval as needed.Use Advanced settings for repeat task. 
7) Open Actions tab ->New 
8) Copy/Paste following line in Program/script * 

* Here D:\B.ps1 in code is path to my B.ps1 file 

C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ powershell.exe D: \ B.ps1

9) ok and apply changes 
10) Done! 
-1
# Filecheck.ps1 

# Version 1.0 

# Use this to simply test for the existance of an input file... Servers.txt. 

# I want to then call another script if the input file exists where the 

# servers.txt is neded to the other script. 

# 


    $workpath=".\Server1\Restart_Test" 

# Created a functon that I could call as part of a loop. 


    function Filecheck 

    { 
    if (test-path $workpath\servers.txt) 

     { 

     rename-item $workpath\servers.txt servers1.txt 

     "Servers.txt exist... invoking an instance of your script agains the list of servers" 


     Invoke-Expression .\your_Script.ps1 

     } 

    Else 
     { 

      "sleeping" 

      Start-Sleep -Seconds 60 
     } 

    } 

    Do 
     { 
     Filecheck 

     $fred=0 
     # Needed to set a variabe that I could check in the while loop. 

     # Probably a better way but this was my way. 

     } 

     While($fred -lt 1) 
Powiązane problemy