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
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 ์ฌ์ฉ์ ์ํธ ์์ฉ ์ ์ฉ ์คํฌ๋ฆฝํธ๋ฅผ ์์ํ๋ ค๋ฉดโฆ
-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์ ๊ฒฐํฉํ์ฌ ํ์ฌ ๋ก๊ทธ์จ ํ ์ฌ์ฉ์ ์ธ์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์๊ฒฉ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
๋ด๊ฐ ์๊ฐํ๋ ํด๊ฒฐ์ฑ ์ด์๋ ๊ฒ ๊ฐ๋ค
๋ด ์จ๊ฒจ์ง ์ฝ์ 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
์ค์ ํ์ง ์์ต๋๋ค.๋จ์ :
์ ๋ ๊ฐ์ธ์ ์ผ๋ก 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
putSet 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์ ์ ํฉ ํ ๊ฒ์
๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋์์ ์ ๊ณตํฉ๋๋ค.
$SHELL
)๋ ๋ฐํํ๊ธฐ ์ ์ pwsh๊ฐ ์ข
๋ฃ ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค ( SUBSYSTEM_CUI
).inheritOnly
) ์์ฑ์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค.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"ํ๋๊ทธ๊ฐ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฝ์ ์ฐฝ์ ํ์ํ์ง ์๋ GUI ์์ฉ ํ๋ก๊ทธ๋จ ์ธ
powershellw.exe
๊ฐ์์ ์ ์์ต๋๋ค.javaw.exe
๋ฐpythonw.exe
์ ๋์ผํฉ๋๋ค.