سؤال

كيف يمكن تشغيل بوويرشيل البرنامج النصي دون عرض نافذة أو أي علامة أخرى للمستخدم؟

بمعنى آخر، يجب أن يعمل البرنامج النصي بهدوء في الخلفية دون أي إشارة للمستخدم.

رصيد إضافي للإجابة التي لا تستخدم مكونات الطرف الثالث :)

هل كانت مفيدة؟

المحلول

ويمكنك إما تشغيله مثل هذا (ولكن هذا يدل على ويندوز لفترة من الوقت):

PowerShell.exe -windowstyle hidden { your script.. }

وأو استخدام ملف المساعد أنا خلقت لتجنب إطار يسمى PsRun.exe أن يفعل ذلك بالضبط. يمكنك تحميل المصدر وإكس ملف تشغيل المهام المجدولة مع WinForm واجهة المستخدم الرسومية في بوويرشيل . أنا استخدامها لالمهام المجدولة.

وتعديل:. كما لوحظ ماركو هذه المعلمة -windowstyle متاحة فقط لV2

نصائح أخرى

يمكنك استخدام ال ملحقات مجتمع PowerShell وافعل هذا:

start-process PowerShell.exe -arg $pwd\foo.ps1 -WindowStyle Hidden

يمكنك أيضًا القيام بذلك باستخدام VBScript: http://blog.sapien.com/index.php/2006/12/26/more-fun-with-scheduled-powershell/

(عبر موضوع المنتدى هذا.)

وهنا نهجا التي لا تتطلب وسائط سطر الأوامر أو قاذفة منفصلة. انها ليست مرئية تماما لنافذة لا تظهر للحظات عند بدء التشغيل. ولكن ثم تختفي بسرعة. أين هذا موافق، وهذا هو، كما أعتقد، نهج أسهل إذا كنت ترغب في إطلاق السيناريو الخاص بك عن طريق النقر المزدوج في اكسبلورر، أو عن طريق اختصار قائمة ابدأ (بما في ذلك، بطبيعة الحال القائمة الفرعية بدء التشغيل). وأنا أحب أن جزء من رمز من النص نفسه، لا شيء خارجي.

ووضع هذا في الجزء الأمامي من السيناريو الخاص بك:

$t = '[DllImport("user32.dll")] public static extern bool ShowWindow(int handle, int state);'
add-type -name win -member $t -namespace native
[native.win]::ShowWindow(([System.Diagnostics.Process]::GetCurrentProcess() | Get-Process).MainWindowHandle, 0)

كنت أواجه نفس المشكلة.لقد اكتشفت إذا ذهبت إلى مهمة في جدول المهام الذي يقوم بتشغيل powershell.exe البرنامج النصي، يمكنك النقر فوق "قم بتشغيل ما إذا كان المستخدم قد قام بتسجيل الدخول أم لا" ولن يُظهر ذلك نافذة بوويرشيل أبدًا عند تشغيل المهمة.

وكنت أعاني من هذه المشكلة عند تشغيل من ج #، على ويندوز 7، وخدمة "كشف الخدمات التفاعلية" وقد ظهرت عند تشغيل نافذة بوويرشيل مخفي كحساب SYSTEM.

وباستخدام "CreateNoWindow" معلمة منعت خدمة ISD ظهرت انها تحذير.

process.StartInfo = new ProcessStartInfo("powershell.exe",
    String.Format(@" -NoProfile -ExecutionPolicy unrestricted -encodedCommand ""{0}""",encodedCommand))
{
   WorkingDirectory = executablePath,
   UseShellExecute = false,
   CreateNoWindow = true
};

وفيما يلى مجموعة من الخطوط الملاحية المنتظمة واحد:

mshta vbscript:Execute("CreateObject(""Wscript.Shell"").Run ""powershell -NoLogo -Command """"& 'C:\Example Path That Has Spaces\My Script.ps1'"""""", 0 : window.close")

وعلى الرغم من أنه من الممكن لهذا وميض نافذة لفترة وجيزة جدا، وهذا ينبغي أن يكون نادر الحدوث.

وأعتقد أن أفضل وسيلة لإخفاء الشاشة وحدة من بوويرشيل عندما الخاص بك تقوم بتشغيل البرامج النصية الخلفية <لأ href = "https://stackoverflow.com/questions/40617800/opening-powershell-script-and- إخفاء الأوامر الفوري ولكن لا للفي واجهة المستخدم الرسومية "> هذا الرمز (و" Bluecakes "الجواب ).

وأود أن أضيف هذا الرمز في بداية كل كتاباتي بوويرشيل أنني بحاجة إلى تشغيل في الخلفية.

# .Net methods for hiding/showing the console in the background
Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("Kernel32.dll")]
public static extern IntPtr GetConsoleWindow();

[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, Int32 nCmdShow);
'
function Hide-Console
{
    $consolePtr = [Console.Window]::GetConsoleWindow()
    #0 hide
    [Console.Window]::ShowWindow($consolePtr, 0)
}
Hide-Console
<اقتباس فقرة>   

إذا كانت هذه الإجابة مساعدة لك، يرجى التصويت ل<لأ href = "https://stackoverflow.com/questions/40617800/opening-powershell-script-and-hide-command-prompt-but-not-the- واجهة المستخدم الرسومية ">" Bluecakes "في جوابه في هذا المنصب.

ولقد خلق أداة صغيرة يمر الدعوة إلى أي أداة وحدة كنت تريد أن تبدأ من خلال نوافذ إلى الملف الأصلي:

https://github.com/Vittel/RunHiddenConsole

وبعد تجميع مجرد إعادة تسمية الملف القابل للتنفيذ إلى " w.exe" (إلحاق "ث")، ووضعها بجانب تنفيذ الأصلي. ثم يمكنك استدعاء مثل powershellw.exe مع المعلمات المعتادة وانها لن تظهر نافذة.

واذا كان هناك من لديه فكرة عن كيفية التحقق مما إذا كانت عملية خلق ينتظر المدخلات، وسوء نكون سعداء ليشمل الحل:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top