문제

a 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/

(을 통해 이 포럼 스레드.)

다음은 명령 줄 Args 또는 별도의 런처가 필요하지 않은 접근 방식입니다. 창이 시작시 잠시 표시되기 때문에 완전히 보이지 않습니다. 그러나 그것은 빠르게 사라집니다. 그것이 괜찮은 곳에서, 이것은 탐색기에서 두 번 클릭하여 스크립트를 시작하거나 시작 메뉴 바로 가기 (물론 시작 하위 메뉴 포함)를 통해 스크립트를 시작하려는 경우 가장 쉬운 방법이라고 생각합니다. 그리고 나는 그것이 외부의 것이 아니라 스크립트 자체의 코드의 일부라는 것을 좋아합니다.

이것을 대본 앞면에 넣으십시오.

$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 스크립트, 클릭 할 수 있습니다 "사용자가 로그온하든 아니든 실행하십시오"그리고 그것은 작업이 실행될 때 PowerShell 창을 절대로 표시하지 않을 것입니다.

Wind

"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")

이 창을 아주 짧게 깜박일 수는 있지만 드문 일이어야합니다.

배경 스크립트를 실행할 때 PowerShell의 콘솔 화면을 숨기는 가장 좋은 방법은 다음과 같습니다. 이 코드 ("Bluecakes" 대답).

백그라운드에서 실행 해야하는 모든 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

이 답변이 도움이된다면 투표하십시오 이 게시물의 그의 답변에서 "Bluecakes".

Windowless를 원본 파일로 시작하려는 콘솔 도구로 통화를 전달하는 작은 도구를 만들었습니다.

https://github.com/vittel/runhiddenconsole

컴파일 후 실행 파일의 이름을 "u003CtargetExecutableName> W.exe "("W "를 추가)하고 원래 실행 파일 옆에 놓으십시오. 그런 다음 일반적인 매개 변수로 PowerShellw.exe를 호출 할 수 있으며 창이 팝업되지 않습니다.

누군가가 생성 된 프로세스가 입력을 기다리고 있는지 확인하는 방법을 알고 있다면 솔루션을 포함시키기 위해 기뻐할 것입니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top