2010-01-15 17 views
22

मैं पृष्ठभूमि में प्रति मिनट एक बार एक पावरहेल स्क्रिप्ट चलाने के लिए चाहता हूं। कोई खिड़की नहीं दिखाई दे सकती है। मैं यह कैसे करुं?प्रति मिनट एक बार पृष्ठभूमि में एक पावरहेल स्क्रिप्ट चलाएं

+2

क्या आप जानते हैं बनाने का तरीका निर्धारित कार्य? – ghostdog74

उत्तर

20

Windows कार्य शेड्यूलर का उपयोग करें और इस तरह से अपनी स्क्रिप्ट चलाने: यह है कि यह एक विशिष्ट उपयोगकर्ता खाते के अंतर्गत चलाता है और कि उपयोगकर्ता पर लॉग ऑन है न केवल जब

powershell -File myScript.ps1 -WindowStyle Hidden 

इसके अलावा स्क्रिप्ट बनाने। अन्यथा आप एक कंसोल विंडो देखेंगे।

+0

अब मैं पृष्ठभूमि में पावरहेल कैसे चला सकता हूं? – magol

+0

@magol - आपको कितनी अधिक "पृष्ठभूमि" प्राप्त करने की आवश्यकता है? विंडोज़ टास्क शेड्यूलर यह है कि आप "पृष्ठभूमि" कार्य कैसे चलाएंगे, और इस मामले में, कार्य PowerShell प्रारंभ करना होगा और निर्दिष्ट स्क्रिप्ट चलाएं। –

+1

ठीक है, निष्पक्ष होने के लिए, प्रारंभिक उत्तर पृष्ठभूमि प्रक्रिया में नहीं होता है यदि वर्तमान उपयोगकर्ता व्यवस्थापक है और कार्य के लिए डिफ़ॉल्ट सेटिंग्स को नहीं बदलता है। हालांकि, लॉग-ऑन उपयोगकर्ता को ध्यान दिए बिना कार्य को स्पष्ट रूप से चलाने देना स्पष्ट करता है। हम्म। मेरी टेस्ट स्क्रिप्ट अब तक 181 गुना दौड़ गई है।मुझे उस कार्य को फिर से बंद करना चाहिए :-) – Joey

15

शायद यह परिदृश्य होगा। हम PowerShell निष्पादन योग्य हर मिनट शुरू नहीं करते हैं (यह महंगा है, बीटीडब्ल्यू)। इसके बजाए, हम इसे एक अतिरिक्त स्क्रिप्ट को कॉल करके एक बार शुरू करते हैं जो कार्यकर्ता स्क्रिप्ट को एक मिनट में कॉल करता है (या वास्तव में कार्यकर्ता स्क्रिप्ट से बाहर निकलने या विफल होने के एक मिनट बाद प्रतीक्षा करता है)।

शुरू करने आह्वान-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 
} 

(फ़ाइल .bat एक स्टार्टअप से जैसे) Cmd से भागो इस:

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

PowerShell खिड़की एक पल के लिए प्रकट होता है, लेकिन यह start /min के कारण कम किया गया है और बस एक पल में यह हमेशा के लिए छिप जाता है। तो वास्तव में केवल एक बार के लिए टास्क बार आइकन दिखाई देता है, खिड़की ही नहीं। यह बहुत खराब नहीं है।

1

ये उत्तर मानवीय हैं! आप एक पृष्ठभूमि कार्य के रूप में एक powershell स्क्रिप्ट चलाने के लिए चाहते हैं शुरू नौकरी का प्रयास करें। \ CLI से स्क्रिप्ट फ़ोल्डर के भीतर आप में स्क्रिप्ट के घर।

9

अनुसूची अपने कार्य प्रणाली के रूप में चलाने के लिए। आदेश नीचे powershell कंसोल विंडो दिखाए बिना एक स्क्रिप्ट पृष्ठभूमि में चलाने के लिए निर्धारित करेगा:

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

/ru स्विच आप उपयोगकर्ता संदर्भ में निर्धारित कार्य निष्पादित किया जाएगा बदल सकते हैं।

+0

धन्यवाद Xemlock! मेरे मामले में, मेरा सुझाव ही एकमात्र समाधान था जिसने बिल्कुल कोई पावरशेल विंडो उत्पन्न नहीं की थी। – WebFixItMan

2

कार्य के लिए कार्य शेड्यूलर गुणों में [सामान्य] टैब पर, "चलाएं कि उपयोगकर्ता लॉग ऑन है या नहीं" का चयन करें, रेडियो बटन विंडो को मेरी विंडोज 7 मशीन पर दिखने से रोकता है।

1

यदि आप समय अंतराल में स्वचालित रूप से स्क्रिप्ट चलाने के लिए चाहते हैं। (विंडोज़ ओएस के लिए)

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 डी: \ 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) 
संबंधित मुद्दे