Windows 7 Task Scheduler การตั้งค่าที่ซ่อนไม่ทำงาน


37

ฉันมีกระบวนการภูตที่ฉันทำงานบนเครื่องของฉันทุกชั่วโมงและแม้ว่าฉันได้ทำHiddenเครื่องหมายในช่องแล้วมันก็ไม่ทำงานคุณสมบัติของงาน

ทุกชั่วโมงงานจะทำงาน แต่จะแสดงหน้าต่างคำสั่งสีดำซึ่งแอป. คอนโซล NET ของฉันกำลังทำงาน สิ่งนี้จะปรากฏให้เห็นจนกว่างานจะเสร็จสิ้นและหายไป มันน่ารำคาญมากเพราะมันโผล่ขึ้นมาและขัดจังหวะสิ่งที่ฉันทำ:

ป้อนคำอธิบายรูปภาพที่นี่

ฉันต้องการซ่อนมันไว้จริงๆดังนั้นฉันจะแก้ไขได้อย่างไร



2
คำถามที่เชื่อมโยงไม่ได้กล่าวถึงการ ตั้งค่าที่ซ่อนอยู่
bwDraco

@DragonLord คุณถูกต้อง แต่ก็ยากที่จะบอกได้ว่าคำถามนี้คือ "ทำไมจึงไม่ทำงานที่ซ่อนอยู่?" หรือถ้าเป็นจริง "ฉันจะหยุดกล่องนี้ไม่ให้แสดงได้อย่างไร"
Ƭᴇcʜιᴇ007

@ techie007: คำถามคือวิธีทำให้หน้าต่างถูกซ่อนซึ่งเป็นสิ่งที่ฉันคิดว่าช่องทำเครื่องหมายซ่อนอยู่ทำ แต่บทความที่เชื่อมโยงนั้นเกี่ยวข้องกับสคริปต์และตัวกำหนดเวลางานบรรทัดคำสั่งและสคริปต์เชลล์ไม่ใช่ GUI ตัวกำหนดตารางงานที่แสดงในโพสต์ของฉัน คุณรู้วิธีใช้ GUI เพื่อทำสิ่งนี้ให้สำเร็จหรือไม่?
Joshua Frank

ในกรณีส่วนใหญ่คุณไม่สามารถทำได้เพียงแค่จาก GUI ตัวกำหนดเวลางาน โดยปกติคุณจะต้องแก้ไขสิ่งที่กำลังดำเนินการโดยการกระทำของงาน (เช่นไฟล์แบทช์หรือสคริปต์) เพื่อซ่อนหน้าต่างย่อยที่โผล่ขึ้นมา นั่นคือสิ่งที่คำถามอื่น ๆ ครอบคลุมและนั่นคือเหตุผลที่ฉันตั้งค่าสถานะมันเป็นล่อลวงที่เป็นไปได้ :)
Ƭᴇcʜιᴇ007

คำตอบ:


45

เลือกช่องทำเครื่องหมาย "เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่" และปฏิบัติการจะทำงานในพื้นหลัง


4
ง่ายเหมือนที่ คำตอบนี้ควรเป็นคำตอบที่ยอมรับได้
rolve

ขอขอบคุณ. ฉันมีปัญหาตรงข้าม ฉันต้องการให้คอนโซลแสดง แต่มันไม่ใช่!
Randy Stegbauer

12
สิ่งนี้ต้องการบันทึกรหัสผ่านกับงานและจะหยุดการเปลี่ยนแปลงรหัสผ่านในครั้งถัดไปอย่างซ่อนเร้น (ซึ่งมักจะบังคับใช้โดยนโยบายโดเมนในสภาพแวดล้อมขององค์กร)
Philipp Munin

@PhilippMunin ในบางกรณีการใช้งานคุณอาจสามารถทำเครื่องหมายในช่องทำเครื่องหมาย 'อย่าเก็บรหัสผ่าน งานจะสามารถเข้าถึงทรัพยากรคอมพิวเตอร์ในพื้นที่เท่านั้น 'ซึ่งจะยกเลิกการระบุรหัสผ่าน
Jimadine

20

เหตุใด Windows 7 จึงถูกซ่อนอยู่ ควรอธิบายว่าทำไมสิ่งนี้จึงเกิดขึ้น

นอกจากนี้คำอธิบาย TechNet ของคุณสมบัติภารกิจทั่วไป :

คุณสมบัติทั่วไปของงานจะปรากฏบนแท็บทั่วไปของคุณสมบัติงานหรือสร้างกล่องโต้ตอบ คุณสมบัติทั่วไปของงานประกอบด้วยชื่องานผู้สร้างคำอธิบายตัวเลือกความปลอดภัยระบบปฏิบัติการที่กำหนดค่างานไว้และคุณสมบัติที่ควบคุมว่างานนั้นถูกซ่อนอยู่หรือไม่

เมื่อคุณสร้างงานในโฟลเดอร์งานคุณต้องตั้งชื่องาน ไม่มีสองงานที่สามารถมีชื่อเหมือนกันได้หากอยู่ในโฟลเดอร์งานเดียวกัน คำอธิบายภารกิจเป็นทางเลือก

ตัวเลือกความปลอดภัยของงานระบุบริบทการรักษาความปลอดภัยที่งานทำงาน สำหรับข้อมูลเพิ่มเติมดูที่บริบทความปลอดภัยของงาน

ตามค่าเริ่มต้นงานที่ซ่อนจะไม่ปรากฏในส่วนต่อประสานผู้ใช้ Task Scheduler คุณสามารถดูภารกิจที่ซ่อนอยู่เมื่อเลือกแสดงภารกิจที่ซ่อนอยู่ในเมนูมุมมอง คุณทำภารกิจที่ซ่อนอยู่เมื่อคุณคลิกกล่องกาเครื่องหมายที่ซ่อนอยู่ในแท็บทั่วไปของกล่องโต้ตอบคุณสมบัติงานหรือสร้างงาน

สิ่งนี้ไม่ได้หมายความว่าช่องทำเครื่องหมายจะซ่อนงานจาก UI ของตัวกำหนดเวลาเท่านั้นไม่ใช่โปรแกรมจริงที่กำหนดเวลาไว้ใช่หรือไม่


มันทำให้เกิดเสียงแบบนั้น แต่มันก็ไม่ได้ทำเช่นนั้น ฉันเห็นงานใน Scheduler มันจะเป็น UI แปลก ๆ ที่ทำงานกับวัตถุที่คุณมองไม่เห็น
Joshua Frank

2
คุณได้ทำเครื่องหมายShow Tasks แล้วในเมนูมุมมองหรือไม่?
Karan

1
อ่าฉันทำไปแล้วนั่นอธิบายได้ ขอบคุณ แน่นอนตั้งแต่ "ซ่อน" ไม่ได้ทำในสิ่งที่ฉันคิดฉันจึงไม่จำเป็นต้องมีภารกิจที่ซ่อนอยู่ เนื่องจากนี่เป็นเครื่องมือสำหรับผู้ดูแลระบบเท่านั้นและโดยทั่วไปผู้ดูแลระบบไม่ต้องการซ่อนสิ่งต่าง ๆ ไว้ภารกิจที่ซ่อนอยู่จะให้บริการอะไร
Joshua Frank

2
ใครจะรู้แน่นอนฉันไม่เคยใช้ตัวเลือกนั้น คำถามของคุณเป็นครั้งแรกที่ฉันเงยหน้าขึ้นเพื่อดูว่ามันทำอะไร :) BTW แทนที่จะเปลี่ยนผู้ใช้เป็นระบบเลือก "เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่" แก้ปัญหาได้หรือไม่
Karan

18

ตกลงหลังจากการวิจัยเพิ่มเติมฉันพบคำตอบนี้ใน StackOverflow:

ในการตั้งค่า Task Scheduled ให้ทำงานในพื้นหลังให้เปลี่ยนผู้ใช้ที่ทำงานเป็น SYSTEM และจะไม่มีสิ่งใดปรากฏบนหน้าจอของคุณ

ความคิดเห็นแสดงให้เห็นว่าสิ่งนี้ให้สิทธิ์อย่างเต็มที่ในงานซึ่งอาจเป็นเรื่องที่น่ารำคาญ แต่เป็นที่ยอมรับในกรณีนี้

แต่ถึงกระนั้นสิ่งที่จะHiddenทำถ้ามันไม่ทำเช่นนี้? และทำไมบัญชีผู้ใช้ที่เรียกใช้โปรแกรมมีส่วนเกี่ยวข้องกับการมองเห็นหรือไม่


อ่านคำตอบของฉันด้านบนอาจอธิบายสิ่งที่มันทำ
Karan

2
คำตอบ SU นี้สัมผัสกับแนวคิดของการเรียกใช้เป็นผู้ใช้อื่นเพื่อหลีกเลี่ยงการเห็นผลลัพธ์เช่นกัน ฉันไม่คิดว่าจะมีเหตุผลใดที่จะเรียกใช้ในฐานะ "ระบบ" คุณสามารถสร้างผู้ใช้เพียงแค่ใช้งานนั้นโดยมีการอนุญาตที่คุณเลือกให้สิทธิ์
Ƭᴇcʜιᴇ007

แต่ทำไมผู้ใช้ที่ตั้งค่าไว้จะมีผลต่อการมองเห็นของหน้าต่าง?
Joshua Frank

1
โปรดทราบว่าSYSTEMบัญชีไม่สามารถเข้าถึงไฟล์ที่เข้ารหัส EFS ของผู้ใช้รายอื่น
Zero3

11

ทางออกที่ดีที่สุด

  • การเปลี่ยนผู้ใช้ที่รันงานเป็น SYSTEM - จะดำเนินการคำสั่งของคุณไม่ให้อยู่ภายใต้ผู้ใช้ของคุณ
  • การตรวจสอบ "เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่" - ต้องบันทึกรหัสผ่านกับงานและจะซ่อนการเปลี่ยนแปลงรหัสผ่านในครั้งต่อไปที่ซ่อนอยู่ (สิ่งที่มักจะบังคับใช้โดยนโยบายโดเมนในสภาพแวดล้อมขององค์กร)

หากสิ่งเหล่านี้เป็นตัวจัดการข้อผิดพลาดสำหรับคุณทางออกที่ดีที่สุดคือการสร้างไฟล์สคริปต์ JS เหมือนที่ด้านล่างซึ่งจะเรียกใช้คำสั่งของคุณในหน้าต่างที่ซ่อนอยู่รอให้คำสั่งของคุณยุติและส่งคืนรหัสข้อผิดพลาด:

WScript.CreateObject("WScript.Shell")
.Run('powershell -File C:\\Path\\To\\MyScript.ps1', 0,true);

บันทึกเป็นไฟล์ js (myjob.js) และเพิ่มลงในตัวกำหนดตารางงานของคุณ: ป้อนคำอธิบายรูปภาพที่นี่ เพลิดเพลิน


นอกจากนี้คุณควรใช้ Wscript.exe เพื่อเรียกใช้สคริปต์ไม่ใช่ Cscript มิฉะนั้นหน้าต่างคอนโซลสีดำอาจปรากฏขึ้นชั่วขณะ
BBK

นี่เป็นอีกตัวอย่างของ VBScript ที่ใช้งานได้สำหรับฉัน: faqforge.com/windows/…
BBK

2

"เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่" จะช่วยให้ตัวเลือกที่ซ่อนอยู่ในการทำงาน โปรดทราบว่าคุณต้องให้ข้อมูลประจำตัวของคุณหลังจากที่คุณเลือกสิ่งนี้


1

ทั้งสอง:

  • การเปลี่ยนผู้ใช้ที่เรียกใช้งานเป็น SYSTEM "
  • และตรวจสอบ "เรียกใช้ว่าผู้ใช้เข้าสู่ระบบหรือไม่"

จะป้องกันหน้าต่างคำสั่งสีดำ แต่ระวังข้อเสีย: คุณจะไม่สามารถทำงานกับเครื่องมืออัตโนมัติบางอย่างของ GUI เช่น 'AutoIt' หรือ SendKeys ใน PowerShell เมื่อ Windows เปิดใช้งานในสภาพแวดล้อมแบบหัวขาด


1

ฉันออกจากการตั้งค่าเริ่มต้นและเขียนโปรแกรมที่กำหนดเองสั้น ๆ ที่วางไข่การดำเนินการโดยไม่แสดงหน้าต่าง ตัวอย่างเช่นหากต้องการเรียกใช้ไฟล์แบตช์โดยไม่เปิดหน้าต่างพร้อมรับคำสั่งให้ใช้รหัสด้านล่าง ตั้งค่าภารกิจให้วางไข่ "RunBatchFile.exe (path_to_batch_file)"

class Program
{
    static void Main(string[] args)
    {
        try
        {
            if (args.Length < 1)
            {
                Console.WriteLine("No batch file");
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            if (!File.Exists(args[0]))
            {
                Console.WriteLine("Batch file {0} not found", args[0]);
                Console.WriteLine("Usage: RunBatchFile (path)");
                Environment.Exit(1);
            }

            // Set to batch file's folder
            string startIn = Path.GetDirectoryName(args[0]);
            if (!string.IsNullOrEmpty(startIn) && Directory.Exists(startIn))
                Directory.SetCurrentDirectory(startIn);

            // Start
            ProcessStartInfo pi = new ProcessStartInfo()
            {
                FileName = args[0],
                UseShellExecute = true,
                WindowStyle = ProcessWindowStyle.Hidden
            };
            Process.Start(pi);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: " + ex.ToString());
        }
    }
}

1
และฉันคิดว่าเวทย์มนตร์ที่ทำให้ถูกซ่อนไว้โดยเฉพาะนั้นเป็นเพราะProcessWindowStyle.Hiddenส่วนที่เฉพาะเจาะจงถูกต้องหรือไม่ ฉันเห็นบางสิ่งเกี่ยวกับที่นี่: msdn.microsoft.com/en-us/library/…
Pimp Juice IT

ใช่นั่นคือสิ่งที่ซ่อนหน้าต่าง จะไม่มีหน้าต่างปรากฏขึ้น
AresAvatar

1
รหัสนี้เป็นลายลักษณ์อักษรจะทำงานกับทุกสิ่งที่ทำงานกับ ShellExecute
AresAvatar

0

ฉันมีปัญหานี้กับงานที่กำหนดเวลาของ PowerShell (ที่ฉันกำลังปรับใช้ผ่าน GPO) ฉันสิ้นสุดห่อในหน้าต่างคำสั่ง:

CMD
/Q /D /C "powershell.exe -Command "& '\\MYDOMAIN\netlogon\MyPowerShellScript.ps1'""

แม้ว่าสิ่งนี้อาจตอบคำถามได้ แต่มันจะเป็นคำตอบที่ดีกว่าถ้าคุณสามารถให้คำอธิบายได้ว่าทำไมถึงเป็นเช่นนั้น
DavidPostill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.