ウィンドウやその他のサインをユーザーに表示せずにPowerShellスクリプトを実行するにはどうすればよいですか?
つまり、スクリプトは、ユーザーへのサインなしでバックグラウンドで静かに実行する必要があります。
サードパーティのコンポーネントを使用しない回答に対する追加のクレジット:)
ウィンドウやその他のサインをユーザーに表示せずにPowerShellスクリプトを実行するにはどうすればよいですか?
つまり、スクリプトは、ユーザーへのサインなしでバックグラウンドで静かに実行する必要があります。
サードパーティのコンポーネントを使用しない回答に対する追加のクレジット:)
次のように実行することもできます (ただし、しばらくの間ウィンドウが表示されます)。
PowerShell.exe -windowstyle hidden { your script.. }
または、私が作成したヘルパー ファイルを使用して、まさにそれを行う PsRun.exe というウィンドウを回避します。ソースと exe ファイルをダウンロードできますPowerShell の WinForm GUI でスケジュールされたタスクを実行します。スケジュールされたタスクに使用します。
編集: マルコが指摘したように、この -windowstyle パラメータは V2 でのみ使用できます。
PowerShell Community Extensionsを使用して、次の操作を実行できます。
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/
隠しPowerShellタスクのスケジュール(インターネットアーカイブ)
スケジュールされた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)
タスクスケジューラとショートカットからもps1が隠されています
mshta vbscript:Execute("CreateObject(""WScript.Shell"").Run ""powershell -ExecutionPolicy Bypass & 'C:\PATH\NAME.ps1'"", 0:close")
答えが期待どおりに機能しないことに気付くだけで、答えを探すのに本当にうんざりしました。
解決
PowerShell スクリプトを起動する非表示のバッチ ファイルを実行する vbs スクリプトを作成します。このタスクのために 3 つのファイルを作成するのはばかげているように思えますが、少なくとも合計サイズは 2KB 未満であり、タスカーまたは手動で完全に実行されます (何も表示されません)。
スクリプト名.vbs
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Users\leathan\Documents\scriptName.bat" & Chr(34), 0
Set WinScriptHost = Nothing
スクリプト名.bat
powershell.exe -ExecutionPolicy Bypass C:\Users\leathan\Documents\scriptName.ps1
スクリプト名.ps1
Your magical code here.
私が試したすべてのソリューションの中で、これはセットアップが最も簡単で最も簡単です。ここから hiddenw.exe をダウンロードします - https://github.com/SeidChr/RunHiddenConsole/releases
Powershell v5 をコンソールレスで実行したいとしましょう。hiddenw.exe の名前を powershellw.exe に変更するだけです。cmd に対してこれを行う場合は、名前を cmdw.exe に変更します。Powershell v7 (pwsh) で実行する場合は、名前を pwshw.exe に変更します。hiddenw.exe の複数のコピーを作成し、末尾に文字 w を付けて実際のプロセスに名前を変更するだけです。次に、プロセスをシステム環境の PATH に追加するだけで、どこからでも呼び出すことができます。または、C:\Windows にコピーします。次に、次のように呼び出します。
powershellw .\example.ps1
c="powershell.exe -ExecutionPolicy Bypass (New-Object -ComObject Wscript.Shell).popup('Hello World.',0,'ОК',64)"
s=Left(CreateObject("Scriptlet.TypeLib").Guid,38)
GetObject("new:{C08AFD90-F2A1-11D1-8455-00A0C91F3880}").putProperty s,Me
WScript.CreateObject("WScript.Shell").Run c,0,false
powershell.exe -windowstyle hidden -noexit -ExecutionPolicy Bypass -File <path_to_file>
次に実行を設定します:最小化
非表示のウィンドウ フラッシュ用のコードを追加しなくても、期待どおりに動作するはずですが、実行がわずかに遅れるだけです。