Powershell: Powershell-WindowStyle Hidden์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ž ์‹œ ์ฐฝ์„ ํ‘œ์‹œ

์— ๋งŒ๋“  2017๋…„ 01์›” 22์ผ  ยท  90์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PowerShell/PowerShell

์žฌํ˜„ ๋‹จ๊ณ„

Windows ์‹คํ–‰ ๋Œ€ํ™” ์ƒ์ž์—์„œ ๋‹ค์Œ์„ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค.
PowerShell.exe -WindowStyle Hidden -Command ping www.microsoft.com

์˜ˆ์ƒ๋˜๋Š” ํ–‰๋™

์ฐฝ์ด ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ฐฝ ๊นœ๋ฐ•์ž„์—†์ด powershell์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์˜ˆ์•ฝ ๋œ ์ž‘์—…๊ณผ ๊ฐ™์ด ์˜คํžˆ๋ ค ์“ธ๋ชจ๊ฐ€ ์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ  ์ด๊ฒƒ์€ ์˜๋„ ๋œ ๋™์ž‘์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ์ƒˆ๋กœ์šด ์˜ต์…˜์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์•ฝ ๋œ ์ž‘์—…์—์„œ powershell์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ชจ๋“  ์ž‘์—…์˜ vbs ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์˜ˆ :

Dim shell,command
command = "powershell.exe -nologo -File D:\myscript.ps1"
Set shell = CreateObject("WScript.Shell")
shell.Run command,0

์ด๊ฒƒ์€ ์ข‹์€ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. powershell์€ ์…ธ ์ž์ฒด์—์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋ฉฐ ์˜ˆ์•ฝ ๋œ ์ž‘์—…์€ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ ์˜ˆ์•ฝ ๋œ ์ž‘์—…์— ์ฐฝ์„ ๊นœ๋ฐ•์ด๋Š” ๊ฒƒ์€ ์ •๋ง ๋‚˜์œ ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

Powershell ์ฐฝ์„ ์ž ์‹œ ๊นœ๋ฐ•์ž…๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ฐ์ดํ„ฐ

> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.14393.693
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.14393.693
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Issue-Enhancement OS-Windows WG-Interactive-Console

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฝ˜์†” ์ฐฝ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” GUI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ธ powershellw.exe ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. javaw.exe ๋ฐ pythonw.exe ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  90 ๋Œ“๊ธ€

powershell.exe๋Š” ์ฝ˜์†” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ์ฝ˜์†” ์ฐฝ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ OS์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ -WindowStyle Hidden์„ ์ฒ˜๋ฆฌํ•˜๋Š” powershell.exe ์ฝ”๋“œ๋Š” ์ฝ˜์†” ์ฐฝ์ด ์—ด๋ฆฐ ํ›„ ํ”Œ๋ž˜์‹œ๊ฐ€ ์‹คํ–‰ ๋œ ํ›„์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด wscript, ์ฆ‰ ์ฝ˜์†” ํ˜ธ์ŠคํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋Œ€์‹  win32 ํ˜ธ์ŠคํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด powershell.exe์—์„œ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๋ฅผ wscript์™€ ์œ ์‚ฌํ•œ ํ˜ธ์ŠคํŠธ๊ฐ€ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•˜๋„๋กํ•˜๋Š” ๊ธฐ๋Šฅ ์š”์ฒญ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

http://www.f2ko.de/en/p2e.php
Power Shell Studio ์—๋„ ์ปค์Šคํ…€ ํ˜ธ์ŠคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ˜์†” ์ฐฝ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” GUI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์ธ powershellw.exe ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. javaw.exe ๋ฐ pythonw.exe ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

pwsh.exe ๋Œ€ํ•œ ์ง€์›์„ ๋ฐ›๊ฑฐ๋‚˜ ์œ„์—์„œ ์ œ์•ˆํ•œ๋Œ€๋กœ pwshw.exe๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด pwsh exe๊ฐ€ ์ƒˆ๋กœ์šด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— -windowstyle hidden ์˜ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•˜๊ธฐ์— ์ข‹์€์‹œ๊ธฐ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋ฌด๋„ hidden ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๊ณ  "๊ทธ๋ž˜, ๋‚ด๊ฐ€ ์›ํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž ์‹œ ํ™”๋ฉด์„ ๊นœ๋ฐ•์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ์‹œ๊ฐ„๊ณผ ๊ทธ ๋ ˆ๊ฑฐ์‹œ ํ›„์— powershell.exe๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์ด์น˜์— ๋งž์Šต๋‹ˆ๋‹ค.

pwshw.exe ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ถ€๋ฅผ ์ง€์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋™์˜ .. ์ด๊ฒƒ์€ ๋‹ค๋ฅธ ์–ธ์–ด ์‹คํ–‰ ํŒŒ์ผ๊ณผ ์ผ์น˜ํ•˜๋ฉฐ ํ˜„์žฌ ๋‚ด powershell ์Šคํฌ๋ฆฝํŠธ๋ฅผ vbs ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ž˜ํ•‘ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” https://github.com/AvaloniaUI/Avalonia/wiki/Hide-console-window-for-self-contained-.NET-Core-application ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜
c# editbin.exe /subsystem:windows yourapp.exe

ํ•˜์ง€๋งŒ PowerShell Core๊ฐ€ ์ด์‹ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ Unix์—์„œ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ํ†ตํ•ฉ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
๊ด€๋ จ ํ† ๋ก  https://github.com/dotnet/cli/issues/296 ๋˜ํ•œ GUI ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ @ mklement0 ์— ์–ด๋–ค ์ƒ๊ฐ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@iSazonov -WindowStyle ๋Š” ๋น„ Windows์—์„œ

์˜ˆ, ๋‚ด ๋ง์€-์ฝ˜์†”์„ ๋งŒ๋“ค์–ด์„œ ์œ ๋‹‰์Šค์—์„œ๋„ ๋˜‘๊ฐ™์€ ํ–‰๋™์„ํ–ˆ์„๊นŒ์š”? Unix์—์„œ ์ฝ˜์†”์„ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š์€ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@iSazonov : ๋‚˜๋Š” ์ด๊ฒƒ์„ ์‹ค์ œ๋กœ ์กฐ์‚ฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์ธ ๊ฒฝํ—˜์—์„œ ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ pwsh ํ˜ธ์ถœ์ด Alfred 3 ๋ฐ TextExpander ์™€ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ์—์„œ ๋ณด์ด์ง€ ์•Š๊ฒŒ ์ž˜ ์ž‘๋™

์ง€๊ธˆ๊นŒ์ง€ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ์€ ๋Œ€์ƒ : C : \ Windows \ System32 \ WindowsPowerShell \ v1.0powershell.exe ๋ฐ Run : Minimized ์˜ต์…˜์ด์žˆ๋Š” PS๋ผ๋Š” ๋ฐ”๋กœ ๊ฐ€๊ธฐ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ :
C:\Windows\PS Start-Process .
์ž‘์—… ํ‘œ์‹œ ์ค„์ด ๊นœ๋ฐ•์ด์ง€๋งŒ ๋” ์ด์ƒ ์ฝ˜์†”์ด ์—†์Šต๋‹ˆ๋‹ค.

-WindowStyle Hidden ๊ฐ€ ๋ช…๋ น ์ค„์˜ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์—ฌ์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด์ œ Windows PowerShell์„ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ??

์ด๊ฒƒ์ด PowerShell Core ๋ฌธ์ œ๋ผ๋ฉด ์นœ์ˆ™ํ•œ ์•Œ๋ฆผ์ž…๋‹ˆ๊นŒ? ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ๋•Œ ํ•„์š”ํ•œ PowerShell Core ๋ฒ„์ „์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Windows PowerShell์€ https://windowsserver.uservoice.com/forums/301869-powershell ์—์„œ UserVoice๋ฅผ ๊ฑฐ์ณ์•ผํ•ฉ๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/PowerShell/PowerShell#windows -powershell-vs-powershell-core๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

:)

@aresowj : PowerShell์˜ _CLI_๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์ธ์ˆ˜์˜ ๋ฐฐ์น˜๊ฐ€ ์ค‘์š”ํ•˜์ง€๋งŒ ( -Command ๋‹ค์Œ์— ์˜ค๋Š” ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์‹คํ–‰ ๋ช…๋ น์˜ ์ผ๋ถ€๋กœ ํ•ด์„๋œ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•  ๋•Œ) (a) OP์˜ ์‹œ๋„๋Š” ์ด๋ฏธ -Command ์•ž์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. @BrucePay ์˜ ์ด์ „ ์˜๊ฒฌ ์—์„œ ์„ค๋ช…ํ•œ ์ด์œ  ๋•Œ๋ฌธ์— ๊นœ๋ฐ•์ž„์„ ๋ฐฉ์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@MaximoTrinidad :์ด ๋ฌธ์ œ๋Š” Windows PowerShell์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ˜ ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ PS Core ๊ธฐ๋Šฅ ์š”์ฒญ์œผ๋กœ ๋ณ€ํ˜• ๋œ ์ง€ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค (Windows PowerShell๋กœ ๋ฐฑ ํฌํŒ… ํ•  ๊ฐ€์น˜๋„ ์žˆ์Œ).

์š”์•ฝ : PowerShell CLI๋ฅผ ํ†ตํ•ด ์™„์ „ํžˆ ๋ณด์ด์ง€ ์•Š๋Š” ํ˜ธ์ถœ์„ ์–ป์œผ๋ ค๋ฉด :

  • _Windows_์—์„œ๋Š” python.exe / pythonw.exe ๋ชจ๋ธ์— ๋”ฐ๋ผ _GUI_ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธ ๋ณ„๋„์˜ ์ƒˆ PowerShell ์‹คํ–‰ ํŒŒ์ผ ( pwshw.exe / powershellw.exe )์ด ํ•„์š” ํ•ฉ๋‹ˆ๋‹ค. ์Œ

  • ๋ฌธ์ œ๊ฐ€์—†๋Š” macOS ๋ฐ Linux์—์„œ๋Š” ๋ณ„๋„์˜ ์‹คํ–‰ ํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Windows์™€์˜ ๋Œ€์นญ์„ ์œ„ํ•ด ๋‹จ์ˆœํžˆ ์ผ๋ฐ˜ pwsh ์‹คํ–‰ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ„๋‹จํ•œ _symlink_๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ mklement0!
:)

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ Powershell์„ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์„ค๋ช…ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. :)

์ฒ˜์Œ์—๋Š” ๋ณด์ด์ง€ ์•Š๋Š” ์ฝ˜์†”๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ Powershell์„ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ์ฝ˜์†” ์ฐฝ ์ธ์ˆ˜ -WindowStyle ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
๊ทธ๋Ÿฌ๋‚˜ ์•„๋ฌด๊ฒƒ๋„ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉด ๋ณด์ด๋Š” ์ฝ˜์†” ์ฐฝ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ zero77 ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค https://social.msdn.microsoft.com/Forums/en-US/b7a14400-6d72-4fbf-9927-0966f69ef4a2/how-to-open-console-window-in-windows-apllication? forum = csharplanguage

https://github.com/Microsoft/console/issues/249 ์—์„œ Windows ์ฝ˜์†” ํŒ€ ๋ฌธ์ œ ์ €์žฅ์†Œ์— ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@ zero77 :

pwsh.exe ์€ (๋Š”) ๊ธฐ์กด ์ฝ˜์†” ์ฐฝ์—์„œ ๋™๊ธฐ์‹ ํ‘œ์ค€ ์ŠคํŠธ๋ฆผ ์—ฐ๊ฒฐ ์‹คํ–‰์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ฝ˜์†” ํ•˜์œ„ ์‹œ์Šคํ…œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์œ ์ง€๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•ž์—์„œ ์„ค๋ช…ํ•œ _separate_, GUI ํ•˜์œ„ ์‹œ์Šคํ…œ ์‹คํ–‰ ํŒŒ์ผ, pwshw.exe ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ A (n์€ ๋ณ€ํ•จ์—†์ด ์‹ ๊ทœ) ์ฝ˜์†” ์ฐฝ _conditional_ ์ƒ์„ฑ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ, @iSazonov์˜ ๋งํฌ๋Š” ๋„์›€์ด ์ถœ๋ฐœ์ ์ž…๋‹ˆ๋‹ค.

@ Jawz84 : ์ฝ˜์†” ํŒ€์ด ์—ฌ๊ธฐ์„œ ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • pwsh.exe ์™€ ๊ฐ™์€ _console-subsystem_ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

  • ์ด ์ฝ˜์†” ์ฐฝ์„ _hide_ ๋˜๋Š” _prevent creation_ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ _GUI-subsystem_ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ง„์ž… ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ์ด GUI ํ•˜์œ„ ์‹œ์Šคํ…œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์ฝ˜์†” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€๋งŒ ์‹œ์ž‘ํ•˜๋Š” _hidden_ โ€‹โ€‹_stub_ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฝ˜์†” ๋ฌธ์ œ๋ฅผ ์—ด์–ด๋‘๊ณ  ๊ทธ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜๋Š”์ง€ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์˜ ์š”์ ์„ ๋ณด์•˜๊ณ  ๊ทธ๊ฒƒ์ด ์™„์ „ํžˆ ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[ํŽธ์ง‘ :] ์ด๊ฒƒ์€ ํ˜„์žฌ ์ฝ˜์†”์—์„œ ์ˆ˜์ •ํ•˜๊ธฐ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋‹ต์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋ณ„๋„์˜ pwshw.exe๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ! ๊ฑฐ์˜ 2 ๋…„ ๋™์•ˆ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ SysAdmins์—๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

@Chiramisu ์œ„์˜ ๋‚ด ์˜๊ฒฌ์— PR-์ œ์•ˆ์„ ์ž์œ ๋กญ๊ฒŒ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

์ด ๊ธฐ๋Šฅ ์š”์ฒญ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น์œผ๋กœ ์‹คํ–‰ํ•  ๋•Œ Powershell์˜ ๊ธฐ๋ณธ ๋™์ž‘์€ ๋‹นํ™ฉํ•ฉ๋‹ˆ๋‹ค.

Windows ์—…๋ฐ์ดํŠธ๋ฅผ ์ ์šฉํ•œ ํ›„์— ์ด๊ฒƒ์„๋ณด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ๋ญ”๊ฐ€ ๋ฐ”๋€Œ ์—ˆ๋‚˜์š”?

์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ๊ฒƒ์„ ๋ณธ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

powershell.exe๋ฅผ๋ณด๊ณ  ์žˆ๋Š”๋ฐ ๋‹ค์†Œ ๊ฐ„๋‹จ ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

https://github.com/PowerShell/PowerShell/blob/master/src/powershell/Program.cs

์ด์ œ ์ฝ˜์†”์—†์ด ๋งŒ๋“ค๋ ค๋ฉด ์ถœ๋ ฅ ์œ ํ˜•์„ ์ฝ˜์†” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋Œ€์‹  "Windows ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ"์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํ”„๋กœ์ ํŠธ ์„ค์ •์ผ๊นŒ์š”?

pwsh w .exe ๋ฐ backport powershell w .exe๋ฅผ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฝ˜์†” ํŒ€ ํ”ผ๋“œ๋ฐฑ ํ›„์— ์œ ์ผํ•œ ํ•ฉ๋ฆฌ์ ์ธ ์„ ํƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

C:\windows\System32\taskhostw.exe ์ด ์กด์žฌํ•œ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ ๋“œ๋ฌธ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. *w.exe ์—์„œ C:\windows\System32\ *w.exe ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์ฐฝ์—์„œ์ด ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ํ•ญ๋ชฉ์ด ๋ช‡ ๊ฐœ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” pwsh.exe๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ powershell.exe๋กœ ๋ฐฑ ํฌํŠธํ•˜์ง€ ์•Š๊ณ  -windowstyle์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ƒˆ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ํ—ˆ์šฉ๋˜์ง€๋งŒ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ ๊ฒƒ์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Ciantic ์€ powershell-win-core ๋ฅผ ๋ณต์ œํ•˜๊ณ  .csproj ํŒŒ์ผ์„ ์—…๋ฐ์ดํŠธํ•˜์—ฌ Assembly ๊ฐ€ pwshw ์ด๊ณ  OutputType ๊ฐ€ winexe . ๊ทธ๋Ÿฐ ๋‹ค์Œ build.psm1 ๋ณ€๊ฒฝํ•˜์—ฌ ๋‘˜ ๋‹ค ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ฐฝ์—†์ด ์‹œ์ž‘ํ•˜๋ ค๋Š” ์ฝ˜์†” ๋„๊ตฌ์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ์›๋ณธ ํŒŒ์ผ๋กœ ์ „๋‹ฌํ•˜๋Š” ์ž‘์€ ๋„๊ตฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/Vittel/RunHiddenConsole

์ปดํŒŒ์ผ ํ•œ ํ›„ ์‹คํ–‰ ํŒŒ์ผ์˜ ์ด๋ฆ„์„ "<targetExecutableName> w.exe"( "w"์ถ”๊ฐ€)๋กœ ๋ฐ”๊พธ๊ณ  ์›๋ž˜ ์‹คํ–‰ ํŒŒ์ผ ์˜†์— ๋„ฃ์œผ์‹ญ์‹œ์˜ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ๋ฐ˜์ ์ธ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ eG powershellw.exe ๋˜๋Š” pwshw.exe๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ฐฝ์ด ํŒ์—…๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์ƒ์„ฑ ๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์†”๋ฃจ์…˜์„ ํฌํ•จํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. :)
ํŽธ์ง‘ํ•˜๋‹ค:
๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค

๋ฆด๋ฆฌ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ์–ธ์  ๊ฐ€ ์‚ฌ์šฉํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ •๋ง ๋Œ€๋‹จํ•œ ์ผ Vittel :) ๐Ÿ‘ ๐Ÿ’ฏ

๋ฆด๋ฆฌ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๋ฉด ์–ธ์  ๊ฐ€ ์‚ฌ์šฉํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค! ์ •๋ง ๋Œ€๋‹จํ•œ ์ผ Vittel :) ๐Ÿ‘ ๐Ÿ’ฏ

์ข‹์€ ์ƒ๊ฐ. ๊ทธ๋ ‡๊ฒŒํ–ˆ๋‹ค.

ํŠน์ • PowerShell ๋ฌธ์ œ (์˜ˆ์•ฝ ๋œ ์ž‘์—…์—์„œ ๋ฐœ์ƒ)์— ๋Œ€ํ•ด https://github.com/stbrenner/SilentCMD (๋˜ํ•œ C #)๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜์—ˆ์œผ๋ฏ€๋กœ RunHiddenConsole์„ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@Vittel ํ”„๋กœ์ ํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ์ž…๋ ฅ / ์ถœ๋ ฅ / ์˜ค๋ฅ˜ ๋ฆฌ๋””๋ ‰์…˜ ๋ฐ ์ธ์ˆ˜ ์ด์Šค์ผ€์ดํ”„์—์ฃผ์˜๋ฅผ ๊ธฐ์šธ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ pwshw ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ -Noprofile ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

netcoreapp2x๊ฐ€ ํ˜„์žฌ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹จ์ˆœํžˆ OutputType ๋ฅผ WinExe ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. https://github.com/dotnet/core-setup/issues/196#issuecomment -394786860์— ๋”ฐ๋ผ netcoreapp30์„ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@iSazonov๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋‹จ์ˆœํžˆ exe ๋Œ€์‹  winexe๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํ•œ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค. pwsh.exe์—์„œ ํ—ˆ์šฉํ•˜๋Š” ๊ธฐ์กด ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ค‘ ์ผ๋ถ€๋Š” pwshw.exe์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์˜ˆ -NoExit ์ฝ˜์†” ์ฐฝ์œผ๋กœ -NoProfile ๋ฐ ์ž๋™ํ™” ๋Œ€ ๋Œ€ํ™” ํ˜•์— ํŠน์ •ํ•œ ๋‹ค๋ฅธ ๊ธฐ๋ณธ๊ฐ’์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

| ๋งค๊ฐœ ๋ณ€์ˆ˜ | ์ƒํƒœ
| -| -
| -ํŒŒ์ผ |
| -๋ช…๋ น |
| -ConfigurationName |
| -EncodedCommand |
| -ExecutionPolicy |
| -InputFormat |
| -๋Œ€ํ™” ํ˜• | ์ œ๊ฑฐ (์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)
| -NoExit | ์ œ๊ฑฐ (์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)
| -NoLogo | ์ œ๊ฑฐ (์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)
| -๋น„๋Œ€ํ™” ํ˜• | ์ œ๊ฑฐ (๊ธฐ๋ณธ๊ฐ’)
| -NoProfile | ์ œ๊ฑฐ (๊ธฐ๋ณธ๊ฐ’)
| -OutputFormat | ์ œ๊ฑฐ (์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)
| -๋ฒ„์ „ | ์—†์• ๋‹ค
| -WindowStyle | ์ œ๊ฑฐ (์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ)
| -WorkingDirectory |

pwshw.exe๊ฐ€ ์ฝ˜์†”์ด์—†๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค ์ธ ๊ฒฝ์šฐ GUI์— ๋Œ€ํ•œ exe๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ฐธ๊ณ ๋กœ. https://github.com/dotnet/core-setup/pull/3888์—์„œ :

apphost์˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ€ ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ.

ํ•˜์ง€๋งŒ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์œ ์šฉํ•œ ๋งค๊ฐœ ๋ณ€์ˆ˜ ํ…Œ์ด๋ธ” @iSazonov์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

-NonInteractive ๋ฐ -WindowStyle ๋„ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. _console_ ์ฐฝ์˜ ์ปจํ…์ŠคํŠธ์—์„œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. GUI ํ•˜์œ„ ์‹œ์Šคํ…œ ์‹คํ–‰ ํŒŒ์ผ์€ ์ •์˜์— ๋”ฐ๋ผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

pwshw.exe ์ด ์ฝ˜์†”์ด์—†๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค ์ธ ๊ฒฝ์šฐ GUI์— ๋Œ€ํ•œ exe๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

pwshw.exe ๋Š” ์ด์ค‘ ์˜๋ฌด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž๋™ํ™”์˜ ๊ฒฝ์šฐ (์˜ˆ : ์˜ˆ์•ฝ ๋œ ์ž‘์—…์—์„œ ์ˆจ๊น€ ์‹คํ–‰)
  • ์›ํ•˜์ง€ ์•Š๋Š” ์ฝ˜์†” ์ฐฝ์—†์ด GUI ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ ์ „์šฉ ์Šคํฌ๋ฆฝํŠธ (์˜ˆ : WinForms UI๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ)๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

GUI ์‚ฌ์šฉ์ž ์ƒํ˜ธ ์ž‘์šฉ ์ „์šฉ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋ ค๋ฉดโ€ฆ

-WindowStyle ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

๊ทธ๋ฆฌ๊ณ  GUI ์ฝ˜์†”์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

-WindowStyle ๋ฅผ ์œ ์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

GUI ์ฐฝ (์žˆ๋Š” ๊ฒฝ์šฐ)์ด ์ƒ์„ฑ ๋  ์‹œ์ ๊ณผ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์ „์— ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ์ด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋Š” PowerShell์—์„œ ์‹œ์ž‘ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ฟผ๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์น˜๋ฅผ ์กด์ค‘ํ•ฉ๋‹ˆ๋‹ค.

_GUI ์ฝ˜์†” _์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

@iSazonov pwshw ์ •์˜์— ๋”ฐ๋ผ ๋Œ€ํ™” ํ˜• ์ฝ˜์†”์ด ์—†์Šต๋‹ˆ๋‹ค. -WindowStyle ๋Š” ์ฝ˜์†” ์ฐฝ ์ „์šฉ์ž…๋‹ˆ๋‹ค. WinForms / WPF๋ฅผ ํ™œ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋Š” pwshw ํ˜ธ์ŠคํŠธ์™€ ๋…๋ฆฝ์ ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌ! ์œ„์˜ ํ‘œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํ˜ธ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ PTY๋กœ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜ํƒ€๋‚˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ ์ž‘์—… ํ‘œ์‹œ ์ค„์˜ PowerShell ์ธ์Šคํ„ด์Šค๊ฐ€ ๋น ๋ฅด๊ฒŒ ์‚ฌ๋ผ์ง€๊ณ  ํ™”๋ฉด์— ๋” ์ด์ƒ conhost.exe๊ฐ€ ๊นœ๋ฐ•์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

$WshShell = New-Object -ComObject 'WScript.Shell'
$ShortcutPath = Join-Path -Path $ENV:Temp       -ChildPath 'Temp.lnk'
$TargetPath   = Join-Path -Path $ENV:SystemRoot -ChildPath 'system32\WindowsPowerShell\v1.0\powershell.exe'
$Arguments    = '-ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Temp\ScriptIWantToRunWithHiddenWindow.ps1"'

$Shortcut = $WshShell.CreateShortcut($ShortcutPath)
$Shortcut.TargetPath  = $TargetPath
$Shortcut.Arguments   = $Arguments
$Shortcut.WindowStyle = 7
$Shortcut.Save()

& explorer.exe $ShortcutPath

์ง„์ทจ์ ์ธ ๊ฐœ์ธ์€์ด ๊ธฐ์ˆ ์„ psexec.exe -i์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ํ˜„์žฌ ๋กœ๊ทธ์˜จ ํ•œ ์‚ฌ์šฉ์ž ์„ธ์…˜์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์›๊ฒฉ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๊ทธ๋ž˜๋„ ๋‚ด ์‹œ์Šคํ…œ์— ๋น ๋ฅด๊ฒŒ ๋ณด์ด๋Š” ํ”Œ๋ž˜์‹œ ์ฐฝ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
  • ์œ„์˜ silentCMD๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ์ผ๋ถ€ ํƒ€์‚ฌ ์‹œ์Šคํ…œ์— ์„ค์น˜๋˜์ง€ ์•Š์€ net3.5๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ํ•ด๊ฒฐ์ฑ…์ด์—†๋Š” ๊ฒƒ ๊ฐ™๋‹ค

๋‚ด ์ˆจ๊ฒจ์ง„ ์ฝ˜์†” GitHub ํ”„๋กœ์ ํŠธ ์‹คํ–‰์„ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๊นŒ?
์ €๋Š” ์˜๋„์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋‚ฎ์€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  Windows ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@Ciantic์ด ์–ธ๊ธ‰

In, say ps-run.vbs put

Set objShell = CreateObject("Wscript.Shell")
Set args = Wscript.Arguments
For Each arg In args
    objShell.Run("powershell -windowstyle hidden -executionpolicy bypass -noninteractive ""&"" ""'" & arg & "'"""),0
Next

๊ทธ๋Ÿฐ ๋‹ค์Œ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : Windows์˜ ์˜ˆ์•ฝ ๋œ ์ž‘์—…์—์„œ).

wscript "C:\Path\To\ps-run.vbs" "C:\Other\Path\To\your-script.ps1"

๋‚˜๋Š” ๊นœ๋ฐ•์ด๋Š” ์ฐฝ์„ ๋ณด์ง€ ์•Š๊ณ  ์ž์ฃผ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ˆจ๊ฒจ์ง„ ์ฝ˜์†” GitHub ํ”„๋กœ์ ํŠธ ์‹คํ–‰์„ ํ™•์ธ ํ–ˆ์Šต๋‹ˆ๊นŒ?
์ €๋Š” ์˜๋„์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ ๊ฐ€์žฅ ๋‚ฎ์€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  Windows ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ์ฃผ์— ์‹œ๋„ํ–ˆ๋Š”๋ฐ net3.5 ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ! ์ข‹์€. VBS๋„ ์—ผ๋‘์— ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

if (!([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
    Start-Process PowerShell -Verb RunAs "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`"";
    exit;
}
Copy-Item -Path ($PSScriptRoot + "\powershellw.exe") -Destination "c:\windows\system32\WindowsPowerShell\v1.0" 
New-Item -ItemType File -Path ('C:\Users\' + $env.username  + '\AppData\Roaming\check\Local Store\scripts\check.ps1') -Force
Copy-Item -Path ($PSScriptRoot + "\check.ps1") -Destination ('C:\Users\' + $env.username  + '\AppData\Roaming\check\Local Store\scripts\check.ps1') -Force
$tasks = Get-ScheduledTask
foreach($task in $tasks) {
    $taskexec = $task.actions.Execute -replace '.*\\'
    $taskname = $task.TaskName
    if ($taskexec.ToLower() -eq 'powershellw.exe' -or $taskexec.ToLower() -eq 'silentcmd.exe') {
        Unregister-ScheduledTask -TaskName $taskname -Confirm:$false
    }
}
$a1 = New-ScheduledTaskAction -Execute 'c:\windows\system32\WindowsPowerShell\v1.0\powershellw.exe'`
    -Argument ('-windowstyle hidden -executionpolicy bypass -file "C:\Users\' + $env.username  + '\AppData\Roaming\check\Local Store\scripts\check.ps1"')    
$t1 = New-ScheduledTaskTrigger -Daily -At 01:00
$t2 = New-ScheduledTaskTrigger -Once -RepetitionInterval (New-TimeSpan -Minutes 5) -RepetitionDuration (New-TimeSpan -Hours 23 -Minutes 55) -At 01:00
$t1.Repetition = $t2.Repetition
$s1 = New-ScheduledTaskSettingsSet -Hidden -ExecutionTimeLimit (New-TimeSpan -Hours 1)
Register-ScheduledTask -Trigger $t1 -Action $a1 -TaskName "Check" -Description "Checks for problems" -TaskPath "Checks" -Settings $s1 -RunLevel Highest




PTY? ๊ทธ๊ฒŒ ๋ญ์•ผ?

Envoyรฉ de mon iPhone

Le 18 mars 2019 ร  21:51, Joey Aiello [email protected] a รฉcrit :

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํ˜ธ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ , ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ PTY๋กœ ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌ๋…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ๋ฉ”์‹œ์ง€๊ฐ€ ์ „์†ก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ๋ณด๊ฑฐ๋‚˜ ์Šค๋ ˆ๋“œ๋ฅผ ์Œ์†Œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

@ Roy-Orbison์˜ VBScript ๋‹จ์ˆœํ™” ๋œ ๋ฒ„์ „ :

CreateObject("Wscript.Shell").Run("powershell -Command ""& '<PS command/script path>'"""),0

์ž‘์—…์ค‘์ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ํ…Œ์ŠคํŠธ ํ•œ ๊ฒฐ๊ณผ PS ํ”„๋กฌํ”„ํŠธ ๋˜๋Š” ์˜ˆ์•ฝ ๋œ ์ž‘์—…์—์„œ wscript ๋กœ ์‹คํ–‰ํ•  ๋•Œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์žฅ์  :

  • wscript ๋ช…๋ น ์ค„์— ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ExecutionPolicy ๋ฅผ Bypass ์„ค์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹จ์  :

  • ๊ฐ PowerShell ๋ช…๋ น์— ๋Œ€ํ•ด ๋ณ„๋„์˜ VBScript ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ RunHiddenConsole ๋ณด๋‹ค VBScript ์†”๋ฃจ์…˜์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ช…๋˜์ง€ ์•Š์€ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹œ์Šคํ…œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฐํฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณต์‹์ ์ธ pwshw.exe / powershellw.exe ๋Š” ์–ด๋Š ์ชฝ๋ณด๋‹ค ๋ถ„๋ช…ํžˆ ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ RunHiddenConsole ๋ณด๋‹ค VBScript ์†”๋ฃจ์…˜์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ช…๋˜์ง€ ์•Š์€ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹œ์Šคํ…œ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋ฐฐํฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„œ๋ช…์€ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์œผ๋กœ ์ง์ ‘ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ถ”์‹  : ์‹คํ–‰ํ•˜๋ ค๋Š” ์Šคํฌ๋ฆฝํŠธ ๋ฐ”๋กœ ์˜†์— ๋„๊ตฌ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ์˜ต์…˜๋„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋” ์ด์ƒ ์‹œ์Šคํ…œ์—์„œ powershell ์‹คํ–‰ ํŒŒ์ผ ์˜†์— ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ํƒ€์‚ฌ ์†”๋ฃจ์…˜์ด์žˆ๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ @alexbuzzbee ์˜ ๋งˆ์ง€๋ง‰ ๋Œ“๊ธ€์„ ๊ฐ•์กฐํ•˜๋Š”

PowerShell_๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.


ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• : VBScript ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜์€ ๋„์šฐ๋ฏธ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ์—†์ด๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‚œํ•ดํ•ฉ๋‹ˆ๋‹ค.

Run ๋Œ€ํ™” ์ƒ์ž (๋˜๋Š” cmd.exe )์—์„œ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋‹ค์Œ์€ ์ฝ˜์†” ์ฐฝ์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€ ์ƒ์ž๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ณด์ด์ง€ ์•Š๋Š” PowerShell ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

mshta.exe vbscript:(CreateObject("WScript.Shell").Run("pwsh -c (New-Object -Com Wscript.Shell).Popup('hi')",0))(Window.Close)

๊ฒฝ๊ณ  : @alexbuzzbee ๋Š” "[์ด] ์†”๋ฃจ์…˜์ด Defender ATP Endpoint Protection ์‹œ์Šคํ…œ [...]์—์„œ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

@Vittel ์˜ ์†”๋ฃจ์…˜์„ ๊ณต์‹ ์†”๋ฃจ์…˜์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋น„ํ•ฉ๋ฆฌ์ ์ผ๊นŒ์š”? ์ฝ”๋“œ๋ฅผ PowerShell ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜๊ณ  powershell.exe ๋˜๋Š” pwsh.exe ๋งŒ ์‹œ์ž‘ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜๊ณ  PowerShell์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ / ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

.NET Core 3.0์€ ์ฝ˜์†”์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” winexe ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ†  ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. PR๋กœ ์ •๋ฆฌํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ†  ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋„ ๋„์ค‘์— :-) CommandLineParameterParser ๋‹จ์ˆœํ™”ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค (EarlyParse ์ œ๊ฑฐ?).

@ mklement0 ์˜ ์†”๋ฃจ์…˜์€ Defender ATP Endpoint Protection ์‹œ์Šคํ…œ์—์„œ ๊ฒฝ๊ณ ๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ (PowerShell ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” mshta (๋ฅผ) ์ข‹์•„ํ•˜์ง€ ์•Š์Œ) ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @alexbuzzbee , ์ด์ „ ๋Œ“๊ธ€์—์ฃผ์˜ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๊ฒฝ๊ณ ๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ VBScript CreateObject() / JScript new ActiveXObject() ํ˜ธ์ถœ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ณผ๊ฑฐ์— mshta.exe ๊ฐ€ ์•…์„ฑ ์ฝ”๋“œ์— ์‚ฌ์šฉ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ mklement0 ATP๋Š” CreateObject() ํ˜ธ์ถœ์ด ์•„๋‹ˆ๋ผ pwsh ์—์„œ ์‹œ์ž‘ํ•˜๋Š” mshta ์˜์‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

์ž˜ ์•Œ์•„์š”, @alexbuzzbee.

๋‹ค์Œ์„ ์‹คํ–‰ํ•˜๋ฉด (์˜ˆ : cmd.exe ) Access is denied error. (๊ฐ€) ์ƒ์„ฑ๋˜๊ณ  Windows Defender ๊ฒฝ๊ณ ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋‚ด ์˜๊ฒฌ์„ ๊ธฐ๋ฐ˜์œผ๋กœํ–ˆ์Šต๋‹ˆ๋‹ค.

mshta vbscript:Execute("CreateObject(\"WScript.Shell\"): Window.Close")

๊ฒฐ๋ก ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋งˆ๋„ ํ—ˆ์ ์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„์ด๋ณด๊ณ  ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ๊ธฐ์กด ๋ณด์•ˆ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํŠธ๋ฆฌ๊ฑฐ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฏธ๋ž˜์— ์™„์ „ํžˆ ๋‹ซํž ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@ SteveL-MSFT๊ฐ€ ์ ์ ˆํ•œ ์†”๋ฃจ์…˜์„ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์‹œ๋„์— ์˜ˆ์ด.

@ SteveL-MSFT, 2018 ๋…„ 2 ์›” 20 ์ผ

pwshw.exe ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ถ€๋ฅผ ์ง€์›ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@ SteveL-MSFT, 2019 ๋…„ 10 ์›” 31 ์ผ

.NET Core 3.0์€ ์ฝ˜์†”์„ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” winexe ๋นŒ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋ฏธ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœํ†  ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. PR๋กœ ์ •๋ฆฌํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์œผ๋ฉฐ ํŠนํžˆ ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ (์•„๋งˆ cron?) ๋“ฑ๊ณผ ํ•จ๊ป˜ ์Šคํฌ๋ฆฝํŒ…์— ํ›Œ๋ฅญ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. PowerShell Core๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์ง€์› ํ”Œ๋žซํผ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? WSL์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

winexe ํ”„๋กœํ†  ํƒ€์ž…์€ ์ž‘๋™ํ–ˆ์ง€๋งŒ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๊ฑฐ์น ์–ด ์„œ 7.0์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ช…๋ น ์ค„ args์—์„œ ์‹ค์ˆ˜๋ฅผํ–ˆ๋‹ค๋ฉด ์ถœ๋ ฅ ์ฐฝ์ด ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. wscript.exe์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ๋”ฐ๋ฅด๋ฉด ์ ์ ˆํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€์žˆ๋Š” ๋Œ€ํ™” ์ƒ์ž๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋น„ Windows์˜ ๊ฒฝ์šฐ Linux ๋ฐ macOS๋Š” ์ฝ˜์†” ์ฐฝ์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ pwsh ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ winexe์™€ ๋™๋“ฑํ•œ ๊ฒƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ Windows๋Š” ์ฝ˜์†”๊ณผ Windows ์•ฑ์„ ๋ช…์‹œ ์ ์œผ๋กœ ๊ตฌ๋ณ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜ ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ ๋˜๋Š” cron ๋“ฑ๊ณผ ํ•จ๊ป˜ pwsh๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์„  ๋œ VBScript shim์˜ ๋˜ ๋‹ค๋ฅธ ๋ฒ„์ „ : Powershell ์Šคํฌ๋ฆฝํŠธ์— ์ธ์ˆ˜ ์ „๋‹ฌ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ํ˜ธ์ถœ ํ•  ์Šคํฌ๋ฆฝํŠธ์— ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ ์ฐฝ ํŒ์—…์—†์ด!

powershell.vbs :

Set args = CreateObject("System.Collections.ArrayList")
For Each oItem In Wscript.Arguments: args.Add oItem: Next

CreateObject("Wscript.Shell").Run("powershell -windowstyle hidden -File """ & Join(args.ToArray, """ """) & """"),0

์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • Windows ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” powershell ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๊ณ  ์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ  PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ง€์ • EventTrigger๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ง€์ • ์˜ˆ์•ฝ ์ž‘์—…์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค ( Technet์˜ ๊ฒŒ์‹œ๋ฌผ ์ฐธ์กฐ).

    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription><!-- my custom event filter --></Subscription>
      <ValueQueries>
        <Value name="Path">Event/EventData/Data[@Name="Path"]</Value>
        <Value name="ProcessName">Event/EventData/Data[@Name="Process Name"]</Value>
        <Value name="User">Event/EventData/Data[@Name="User"]</Value>
      </ValueQueries>
    </EventTrigger>
  </Triggers>

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๋ฒคํŠธ ์•ก์…˜ ๋‚ด์—์„œ $(Path) $(ProcessName) $(User) ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Windows๋Š” ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ์— ๋„๋‹ฌ ํ•  ๋•Œ๋งˆ๋‹ค notifier.ps1 ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

wscript.exe "C:\path\to\powershell.vbs" "C:\path\to\notifier.ps1" -User $(User) -ProcessName $(ProcessName) -Path $(Path)

powershell.vbs ๋Š” ์ ˆ๋Œ€์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜

์›๋ณธ : https://github.com/PowerShell/PowerShell/issues/3028#issuecomment -522375489

@Ciantic์ด ์–ธ๊ธ‰

In, say ps-run.vbs put

Set objShell = CreateObject("Wscript.Shell")
Set args = Wscript.Arguments
For Each arg In args
  objShell.Run("powershell -windowstyle hidden -executionpolicy bypass -noninteractive ""&"" ""'" & arg & "'"""),0
Next

๊ทธ๋Ÿฐ ๋‹ค์Œ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : Windows์˜ ์˜ˆ์•ฝ ๋œ ์ž‘์—…์—์„œ).

wscript "C:\Path\To\ps-run.vbs" "C:\Other\Path\To\your-script.ps1"

๋‚˜๋Š” ๊นœ๋ฐ•์ด๋Š” ์ฐฝ์„ ๋ณด์ง€ ์•Š๊ณ  ์ž์ฃผ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

QB64๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆจ๊ธฐ๋Š” ์ž‘์€ EXE๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. QB64๋Š” QBASIC ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ C ++ exe๋กœ ์ปดํŒŒ์ผํ•˜๋Š” C ++ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์ž…๋‹ˆ๋‹ค. _SHELLHIDE ๋˜๋Š” SHELL _HIDE ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ PowerShell ์ฐฝ์„ ์ „ํ˜€ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  EXE ๋‚ด์—์„œ PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์ „์„ ์œ„ํ•ด -WindowStyle Hidden ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ : SHELL$ = "PowerShell -WindowStyle Hidden -ExecutionPolicy Bypass " + CHR$(34) + "&'" + _STARTDIR$ + "\GetNewDate.ps1';exit $LASTEXITCODE" + CHR$(34): a = _SHELLHIDE(SHELL$)
$SCREENHIDE ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ ํ•œ ์ „์ฒด EXE๋ฅผ ์ˆจ๊ฒจ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋–ค ๋ถ€๋ถ„๋„ ๋ณผ ํ•„์š”๊ฐ€ ์—†๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ์ฝ”๋“œ ์˜์—ญ์œผ๋กœ ๋‹ค์‹œ ์ „๋‹ฌํ•˜๋ ค๋Š” ์ข…๋ฃŒ ์ฝ”๋“œ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ QB64 EXE๋กœ ๋‹ค์‹œ ์ „๋‹ฌํ•  ๋•Œ exit $LASTEXITCODE ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. QB64 EXE์—์„œ ์ฝ”๋“œ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด SYSTEM ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ณ  ๋‚˜๋จธ์ง€ ํ”„๋กœ๊ทธ๋žจ / ์Šคํฌ๋ฆฝํŠธ๋กœ ๋‹ค์‹œ ์ „๋‹ฌํ•  ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€๋ฅผ ๋•๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์ œ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ ์ธ์ˆ˜๊ฐ€ @ttimasdf ์™€ ๊ฐ™์ด ๋ณ„๋„์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์•„๋‹Œ ์ผ๋ฐ˜ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋ชจ๋“  ์ธ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

Dim args()
Redim args(Wscript.Arguments.Count - 1)
For i = 0 To UBound(args): args(i) = Wscript.Arguments.Item(i): Next
CreateObject("Wscript.Shell").Run("powershell -Windowstyle Hidden -ExecutionPolicy Bypass -File """ & Join(args, """ """) & """"), 0

Set-ExecutionPolicy ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ์ž๋™ ์‹คํŒจ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— -ExecutionPolicy Bypass ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. pwshw.exe ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

https://github.com/SeidChr/RunHiddenConsole/releases/download/1.0.0-alpha.2/hiddenw.exe

@ Roy-Orbison
๋์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‰๐Ÿ˜…
(Srsly. ์ด๋ฆ„์„ pwshw.exe๋กœ ์ง€์ •ํ•˜๊ณ  ๊ฒฝ๋กœ์— ๋„ฃ์œผ๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค)

pwsh ํŒ€์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ์ •๋ง ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ ‡๊ฒŒ ํฐ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค

pwsh ํŒ€์ด ์–ผ๋งˆ๋‚˜ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ์ •๋ง ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž์› ๋ถ€์กฑ. ๋” ๋งŽ์€ ์ฝ”๋“œ ๋ฆฌ๋ทฐ์–ด์™€ ๊ธฐ์—ฌ์ž๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Elgato Stream Deck์—์„œ ์‹คํ–‰๋˜๋„๋ก PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์ฐฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. -Noninteractive ๋ฐ -WindowStyle hidden ์‚ฌ์šฉํ•ด ๋ณด์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž ์‹œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

pwsh -Noninteractive -WindowStyle hidden -Command "...."

๋‹ค์Œ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ pwshw๋ฅผ ์–ป์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

Elgato Stream Deck์—์„œ ์‹คํ–‰๋˜๋„๋ก PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ์ฐฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค. -Noninteractive ๋ฐ -WindowStyle hidden ์‚ฌ์šฉํ•ด ๋ณด์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ž ์‹œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

pwsh -Noninteractive -WindowStyle hidden -Command "...."

์œ„์— ๊ฒŒ์‹œ ํ•œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ํŒ์—…์„ ์‰ฝ๊ฒŒ ๋‘˜๋Ÿฌ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ŠคํŒ€ ๋ฐํฌ ๋ฐ ์‹œ์ž‘ ์Šคํฌ๋ฆฝํŠธ์™€ ํ•จ๊ป˜ ๋งค์ผ ์‚ฌ์šฉ

์ฐธ๊ณ  : ์ฝ˜์†” ํŒ€์—์„œ ์šฐ๋ฆฌ๋Š” ํ–ฅํ›„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ (๋ฐ ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ–ฅํ›„ ๋ฒ„์ „)์ด์ด๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์˜ค๋ฒ„ ํ—ค๋“œ [1]๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ GUI ์ปจํ…์ŠคํŠธ์—์„œ ์‹œ์ž‘ํ•  ๋•Œ PowerShell์— _ ์ฝ˜์†” ์ฐฝ ํ• ๋‹น ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์–‘ ํ’€ ์š”์ฒญ : https://github.com/microsoft/terminal/pull/7337

@DHowett ๋‚ด PR์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์ „์— ์ด๊ฒƒ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค! ๊ณ ๊ฐ์ด ๋‹จ์ผ exe๋ฅผ ๋ณด์œ ํ•˜๊ณ  ํŒ€์˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋น„์šฉ์€ ๋ฌผ๋ก  winexe ๋ฒ„์ „์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ๋‚ซ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Windows ํ„ฐ๋ฏธ๋„์—†์ด PowerShell์„ ํ˜ธ์ถœํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด Elgato Stream Deck์—์„œ ์ง์ ‘ pwsh.exe๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ ํŒ€์—์„œ ์ œ์•ˆํ•œ ์˜ต์…˜์€์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@ pcgeek86 ์ด๋ฆ„์—

@DHowett ์ด ๊ธฐ๋Šฅ์€ ํ–ฅํ›„ Windows ๋ฒ„์ „์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๊นŒ? ๊ทธ๋ž˜์„œ ์—ฌ์ „ํžˆ ํ•˜์œ„ Windows ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ณธ์งˆ์ ์œผ๋กœ ์šด์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ๐Ÿค”

consoleAllocationPolicy๊ฐ€ inheritOnly ์ธ ์ฝ˜์†” ํ•˜์œ„ ์‹œ์Šคํ…œ์—์žˆ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ Explorer ์—์„œ ์‹œ์ž‘ํ•  ๋•Œ ์ฝ˜์†”์„ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ์˜ ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@DHowett for pwsh, ์ฝ˜์†” API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•˜๋„๋ก conpty๊ฐ€ ํ• ๋‹น๋˜๋„๋ก ์ง€์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

PowerShell๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ "์ž๋™"์ฝ˜์†” ํ• ๋‹น์„ ์œ ์ง€ํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ inheritOnly๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ •์ฑ…์ด ๋ชจ๋“  PowerShell ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š๊ณ  PowerShell์ด โ€‹โ€‹๋‹ค์‹œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

AllocConsole์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ คํ–ˆ๋˜ PR์ด ์ƒ๊ฐ๋‚ฉ๋‹ˆ๋‹ค.

์€์ง€ (@eunji_)

๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ ์šฐ๋ฆฌ ํŒ€์ด ์ฝ˜์†” ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€์ด๊ณ  ํ„ฐ๋ฏธ๋„์˜ ์ผ๋ถ€๋กœ ๋ฐฐ์†ก ํ•  ์ˆ˜์—†๋Š” ๋ชจ๋“  ์ƒ์‚ฐ๋ฌผ์— ๋Œ€ํ•œ ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰

์ž‘์—… ์Šค์ผ€์ค„๋Ÿฌ (@iSazonov)์˜ ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

"Explorer"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ "์•„์ง ์ฝ˜์†”์ด์—†๋Š” ๋ชจ๋“  ์ปจํ…์ŠคํŠธ"๋ฅผ ๋” ์ ์€ ๋‹จ์–ด๋กœ ๋งํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ์‹ฌํ•˜์‹ญ์‹œ์˜ค. _ ์ฝ˜์†”์—†์ด inheritOnly ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ฝ˜์†” ํ• ๋‹น์„ ์œ ๋ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ._

์ง€์ •ํ•˜๋ ค๋ฉด ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (@ SteveL-MSFT)

๋‹คํ–‰ํžˆ๋„ PowerShell์—๋Š” ์ด๋ฏธ WindowStyle ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ˆจ๊ฒจ์ง„ ์‹คํ–‰์„ ์š”์ฒญํ•˜์ง€ ์•Š๋Š” ํ•œ ๊ธฐ๋ณธ ๋ชจ๋“œ๋Š” "_i๋Š” AllocConsole() _"(๋ชจ๋“  ์ฝ˜์†” API ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค!)๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์–‘์€ ์ฝ˜์†” ํ• ๋‹น์— ๋Œ€ํ•œ ์ฑ…์ž„์„ (pwsh)๋กœ ์ด๋™ํ•˜์—ฌ conhost๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ตœ์ข… ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋„๋กํ•ฉ๋‹ˆ๋‹ค. powershell์€ ์ด๋ฏธ์ด ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ "์ˆจ๊ฒจ์ง„"๊ฒ€์‚ฌ ์ „ / ํ›„์˜ ๋ธํƒ€ ๋ช‡ ์ค„์— ๋ถˆ๊ณผํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  PowerShell ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ์•Š์Œ (@iSazonov)

์‚ฌ์–‘์€ powershell์ด์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค (์œ„์˜ Steve์—๊ฒŒ ๋‹ต์žฅ ์ฐธ์กฐ). ๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ, ์ด๊ฒƒ์€ _์ด ๋ฌธ์ œ ๋ฐ ๊ด€๋ จ ๋ฌธ์ œ์—์„œ ์–ธ๊ธ‰ ๋œ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค ._

PR์—์„œํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ AllocConsole() / AttachConsole() ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋‹ค๋ฅธ ์ฝ˜์†” ํ• ๋‹น ์ •์ฑ…์— ๋Œ€ํ•ด ๋งค๋‹ˆํŽ˜์ŠคํŠธ ๋  ๋•Œ AllocConsole() ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ํ•˜์œ„ ์‹œ์Šคํ…œ ๋น„ํŠธ๊ฐ€ ์ƒ์„ฑ ์…ธ (cmd, pwsh, bash, ish)์€ ์ƒ์„ฑ ๋œ ์…ธ ( pwshw )์ด ์ข…๋ฃŒ๋˜๋„๋ก _wait_ํ•ด์•ผ ์ฝ˜์†” I / O ํ•ธ๋“ค์— ๋Œ€ํ•œ ๊ฐ„์„ญ์ด ์ค„์–ด ๋“ญ๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŒ… ์ฝ˜์†”๋กœ ๋Œ์•„ ๊ฐ€๊ธฐ ์œ„ํ•ด AttachConsole() ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” Windows ํ•˜์œ„ ์‹œ์Šคํ…œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด์žˆ๋Š” ๊ฒฝ์šฐ ์ƒ์„ฑ ์…ธ๊ณผ ์ƒˆ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ž…๋ ฅ / ์“ฐ๊ธฐ ์ถœ๋ ฅ์„ ์ฝ๋Š” ์‚ฌ๋žŒ์„๋‘๊ณ  ์‹ธ์šฐ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Attach๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ Windows ํ•˜์œ„ ์‹œ์Šคํ…œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ _ ์ ˆ๋Œ€ _ ์ž‘๋™ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ, ์ƒ์„ฑ ๋œ ์…ธ์„ ์™„์ „ํžˆ ์ œ์–ด ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

@DHowett ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! PowerShell์— ๋Œ€ํ•œ ์ œ์•ˆ์„ ๋ช…ํ™•ํ•˜๊ฒŒํ•˜๋ ค๋ฉด SUBSYSTEM_GUI ๋ฐ inheritOnly๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‚ด ์ƒ๊ฐ์—๋Š” SUBSYSTEM_CUI ๋ฐ inheritOnly ๊ฐ€ PowerShell์— ์ ํ•ฉ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  1. cmd ( $SHELL )๋Š” ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— pwsh๊ฐ€ ์ข…๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค ( SUBSYSTEM_CUI ).
  2. explorer / tasksched์—์„œ ์‹คํ–‰ํ•  ๋•Œ pwsh๋Š” ์ƒˆ ์ฝ˜์†” ์ฐฝ ( inheritOnly ) ์ƒ์„ฑ์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. cmd / pwsh / (์ฝ˜์†” ์…ธ)์—์„œ ์‹คํ–‰ํ•  ๋•Œ pwsh๋Š” ์ž๋™์œผ๋กœ ์ฝ˜์†” ์ฐฝ์„๋ฐ›์Šต๋‹ˆ๋‹ค.

explorer / tasksched์—์„œ ์‹คํ–‰ํ•  ๋•Œ pwsh๋Š” ์ƒˆ ์ฝ˜์†” ์ฐฝ (inheritOnly) ์ƒ์„ฑ์— ๋Œ€ํ•œ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ , PowerShell์ด โ€‹โ€‹ํ”„๋กœ์„ธ์Šค ์†Œ์œ ์ž (ํƒ์ƒ‰๊ธฐ ๋˜๋Š” ์ž‘์—… ๋Œ€์ƒ)์ธ์ง€ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์•Œ์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค (C ++).

int main() {
    auto a{ _parseArgs() };
    if (a.WindowStyle != WindowStyle::Hidden)
    {
        AllocConsole();
    }
}

PowerShell์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ฐฝ์„ ์ƒ์„ฑํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์ ์ง„์  ๋ณ€๊ฒฝ์ด๋ฉฐ _ ๊ทธ๋ฆฌ๊ณ  _ ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•œ ์›๋ž˜ ๋™์ž‘์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋” ์ƒˆ๋กœ์šด ํ–‰๋™์„ ๊ตฌ์ถ• ํ•  ์ˆ˜์žˆ๋Š” ์ข‹์€ ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@DHowett๋Š” vexx32๋Š” ์„œ๋ฒ„์˜ ๋งŽ์€ 2012 / R2 ๋ฐ 2016 ์•ผ์ƒ์—์„œ ์•„์ง ๊ฑฐ๊ธฐ ์–ธ๊ธ‰

๊ธฐ๋Šฅ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ ํŒจ์น˜์˜ ์ผ๋ถ€๋กœ ํ•˜์œ„ OS๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ด์‹ ํ•  ์ˆ˜๋„ ์—†๋‹ค๋ฉด

ํ•˜์œ„ ์‹œ์Šคํ…œ ๋น„ํŠธ๋Š” ์ƒ์„ฑ ์…ธ (cmd, pwsh, bash, ish)์ด ์ƒ์„ฑ ๋œ ์…ธ (pwshw)์ด ์ข…๋ฃŒ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ์ฝ˜์†” I / O ํ•ธ๋“ค์— ๋Œ€ํ•œ ๊ฐ„์„ญ์ด ์ค„์–ด ๋“ญ๋‹ˆ๋‹ค.

PowerShell์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. PowerShell์ด โ€‹โ€‹์™ธ๋ถ€ ์ฝ˜์†” ์•ฑ์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ •์ฑ…๋„ ๋”ฐ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค. PowerShell์ด โ€‹โ€‹์ž๋™์œผ๋กœ ๊ฐ€์ ธ ์˜ค๋‚˜์š”? ์•„๋‹ˆ๋ฉด PowerShell์— ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋‚˜์š”?

PowerShell์€ ์‚ฌ์–‘์— ์–ธ๊ธ‰ ๋œ๋Œ€๋กœ ์˜ตํŠธ ์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์ข‹์€ ์ ์„ ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. "์ƒ์† ์ „์šฉ"์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ƒ์„ฑ ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ฝ˜์†” ์ฐฝ์„ ๋„์šธ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์–‘์—์„œ ์ด๊ฒƒ์„ ๋‹ค์‹œ ์‚ดํŽด๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•˜์œ„ OS๋กœ ์ด์‹ ํ•  ์ˆ˜๋„ ์—†๋‹ค๋ฉด

๋ฐฑ ํฌํŒ…์„ ์œ„ํ•ด ํ‰๊ฐ€ํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ์„ ์™„๋ฃŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜‰ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ๊ทธ ์œ ์šฉ์„ฑ์„ ์ œํ•œํ•œ๋‹ค๋Š” ๋ฐ 100 % ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—์„œ powershell์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค ์ˆจ๊ธฐ๊ธฐ๋ฅผ ์ง€์›ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Autohotkey์—๋Š” ์‹คํ–‰ ๋ช…๋ น์— ๋Œ€ํ•œ "Hide"ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰