質問

ウィンドウまたは他のサインを表示せずに PowerShell スクリプトを実行する方法ユーザーですか?

つまり、スクリプトはユーザーに何のサインもなしにバックグラウンドで静かに実行する必要があります。

サードパーティのコンポーネントを使用しない回答に対する追加クレジット:)

役に立ちましたか?

解決

次のように実行できます(ただし、しばらくの間ウィンドウが表示されます):

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

または、私が作成したヘルパーファイルを使用して、PsRun.exeと呼ばれるウィンドウを回避します。ソースとexeファイルをダウンロードできます PowerShellでWinForm GUIを使用して、スケジュールされたタスクを実行します。スケジュールされたタスクに使用します。

編集済み:Marcoが指摘したように、この-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/

(Via このフォーラムスレッド。)

これは、コマンドライン引数や別のランチャーを必要としないアプローチです。起動時にウィンドウが一時的に表示されるため、完全には見えません。しかし、その後すぐに消えます。それが問題ない場合、これは、エクスプローラーでダブルクリックするか、スタートメニューのショートカット(もちろん、スタートアップサブメニューを含む)を使用してスクリプトを起動する場合の最も簡単な方法だと思います。そして、私はそれがスクリプト自体のコードの一部であり、外部のものではないことが好きです。

スクリプトの先頭にこれを置きます:

$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 スクリプトを実行している Task Scheduler Task にアクセスすると、<!> quot;をクリックできます。 ユーザーがログオンしているかどうかに関係なく実行する <!> quot;タスクの実行時にPowerShellウィンドウが表示されることはありません。

Windows 7でc#から実行しているときにこの問題が発生していました。<!> quot; Interactive Services Detection <!> quot; SYSTEMアカウントとして非表示のPowerShellウィンドウを実行すると、サービスがポップアップしていました。

<!> quot; CreateNoWindow <!> quot;の使用パラメーターにより、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")

ウィンドウを非常に短時間フラッシュすることは可能ですが、まれにしか発生しません。

バックグラウンドスクリプトを実行しているときにPowerShellのコンソール画面を非表示にする最良の方法は、このコード(<!> quot; Bluecakes <!> quot; answer)。

このコードは、バックグラウンドで実行する必要があるすべてのPowerShellスクリプトの先頭に追加します。

# .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
  

この回答があなたの助けになった場合、 <!> quot; Bluecakes <!> quot;この投稿の回答で。

元のファイルまでウィンドウなしで起動するコンソールツールに呼び出しを渡す小さなツールを作成しました:

https://github.com/Vittel/RunHiddenConsole

コンパイル後、実行可能ファイルの名前を<!> quot; <!> lt; targetExecutableName <!> gt; w.exe <!> quot;に変更します。 (<!> quot; w <!> quot;を追加)、元の実行可能ファイルの横に配置します。 その後、e.Gに電話をかけることができます。 powershellw.exeに通常のパラメーターを指定すると、ウィンドウがポップアップしません。

作成されたプロセスが入力を待機しているかどうかを確認する方法を誰かが考えている場合、解決策を含めて喜んでいます:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top