Powershell: "PowerShell vZeroTechnicalDebt"๋ฐ / ๋˜๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ์ƒˆ / ๊ณ ์ • ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์˜ตํŠธ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•„์š”ํ•œ๊ฐ€์š”?

์— ๋งŒ๋“  2018๋…„ 04์›” 26์ผ  ยท  69์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PowerShell/PowerShell

์—ฌ๊ธฐ์„œ _ ๊ธฐ์ˆ  ๋ถ€์ฑ„ _๋ผ๋Š” ์šฉ์–ด๋Š” "์ด์ „ ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š๊ณ ๋Š” ๊ณ ์น  ์ˆ˜์—†๋Š” ๋ˆ„์  ๋œ ๊ณ ์žฅ๋‚œ ํ–‰๋™"์„ ์˜๋ฏธํ•˜๊ธฐ ์œ„ํ•ด ๋Š์Šจํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


_Update_ : @rjmholt ๋Š” ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณต์‹ ํ† ๋ก ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค : # 13129.


์ฐธ๊ณ  : https://github.com/PowerShell/PowerShell/issues/5551#issuecomment -380522712์—์„œ ๋ฐœ์ƒํ•œ์ด ๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ›์•„๋“ค์ด๋ ค๋Š” ๊ทผ๋ณธ์ ์ธ ์˜์ง€๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ RFC๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์— ๋Œ€ํ•œ PowerShell์˜ ํ™•๊ณ ํ•œ ๋…ธ๋ ฅ์€ ์ˆ˜๋…„ ๋™์•ˆ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋งค์šฐ ์ž˜ ๋ด‰์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•œํŽธ, ํ”ผํ•  ์ˆ˜์—†๋Š” ๋ถ€์‚ฐ๋ฌผ์€ ์˜ˆ์™ธ๋ฅผ ์•”๊ธฐํ•ด์•ผํ•˜๋Š” ๊ธฐ์ˆ ์  ๋ถ€์ฑ„์˜ ์ถ•์ ์ด๋ฉฐ ์‹ ๊ทœ ์ด๋ฏผ์ž์—๊ฒŒ๋Š” ์žฅ๋ฒฝ์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋‚  ์กด์žฌํ•˜๋Š” ํŠน์ • ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ํฌ์ƒํ•ด์•ผ๋งŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• (์ƒํ˜ธ ๋ฐฐํƒ€์ ์ด์ง€ ์•Š์Œ)์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ฅผ ๊นŽ์•„ ๋‚ด์ง€ ๋งŒ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์ƒ์‹คํ•˜๋Š” "PowerShell vZeroTechnicalDebt"์—๋””์…˜์˜ ๊ตฌํ˜„

  • ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ๋Š” ๊ธฐ๋Šฅ / ์ˆ˜์ • ์‚ฌํ•ญ์„ ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค์— ํ†ตํ•ฉํ•˜์—ฌ ์—„๊ฒฉํ•˜๊ฒŒ _opt-in_ ๊ธฐ์ค€์œผ๋กœ ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณ ๋ คํ•  ์ˆ˜์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ด์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ฒดํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ํฌ์ƒํ•ด์•ผ๋งŒ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ์กด์˜ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋” ๋งŽ์ด ์ƒ๊ฐํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

  • ํ˜„์žฌ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์˜ ๋ณต์žก์„ฑ๊ณผ ๋ถˆ์ผ์น˜, "๋„ค์ดํ‹ฐ๋ธŒ"(์™ธ๋ถ€) ํ”„๋กœ๊ทธ๋žจ๊ณผ์˜ ํ†ตํ•ฉ ๋ฌธ์ œ [๊ฒฐํ•]-# 3996

  • ์ผ๊ด€์„ฑ์—†๊ณ  ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์šด ์„ ํ˜ธ ๋ณ€์ˆ˜ / ๊ณตํ†ต ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ƒ์†-# 4568

  • ์ธํ•ด ์„ฑ๋Šฅ ๋ฌธ์ œ [object[]] - ๊ธฐ๋ณธ ๋ชจ์Œ ์œ ํ˜• ์ธ https://github.com/PowerShell/PowerShell/issues/5643#issuecomment -378467986

    • PowerShell์€ ๋‹น์—ฐํžˆ Unix ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์†๋„์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์ง€๋งŒ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ํ•œ ๊ณ ํ†ต์—†์ด ์ƒํ˜ธ ์šด์šฉ๋˜๋„๋กํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฌธ์ œ๋Š” ์ธ์šฉ ๋ฐ ๊ตฌ๋ฌธ ๋ถ„์„์„ ๋‹ค์‹œ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
  • ์–ดํœ˜ ์ ์œผ๋กœ ์ž‘๋™ํ•ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋™์  ๊ธฐ๋Šฅ : https://github.com/PowerShell/PowerShell/issues/3879#issuecomment -304940545 re break ๋ฐ continue , https://github.com/ PowerShell / PowerShell-RFC / blob / master / 1-Draft / RFC0003-Lexical-Strict-Mode.md re Set-StrictMode (ํ›„์ž๋Š” ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š๊ณ  ์ˆ˜์ • ๋  ์ˆ˜ ์žˆ์Œ)

  • [psobject] ๊ด€๋ จ ๋ฌธ์ œ (ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š๊ณ  ๊ณ ์น  ์ˆ˜ ์žˆ์ง€๋งŒ) : # 5551, # 5579, # 4343, # 5763

  • ๋ถˆํ–‰ํ•œ -LiteralPath / -Path ๋ถ„ํ•  -์—์„œ ๊ฐ„๋‹จํ•œ ์ด๋ก ์  ๊ทผ๊ฑฐ https://github.com/PowerShell/PowerShell/issues/6714#issuecomment ์—์„œ -383992749 ๋ฐ ํƒˆ์ถœ ๋น„์•  https://github.com / PowerShell / PowerShell / issues / 6714 # issuecomment -384353966 (์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Œ)

  • ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ์ธ์šฉ-# 3734, # 5576 (๋ฐ ๊ธฐํƒ€) ๋ฐ ๊ด€๋ จ ์‹œ๋„๋Ÿฌ์šด RFC

  • -Command ๋ฐ -File CLI ์ธ์ˆ˜ ๊ตฌ๋ฌธ ๋ถ„์„ - https://github.com/PowerShell/PowerShell/issues/4024#issuecomment -311541803 # 3223 - ๊ทธ๋ฆฌ๊ณ  POSIX-๋“ฑ์˜ CLI์™€ ์ผ๋ฐ˜ ํŽธ์ฐจ shells-# 3743-๋น„๋Œ€ํ™” ํ˜• (์Šคํฌ๋ฆฝํŠธ) ํ˜ธ์ถœ์—์„œ๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ๋กœ๋“œ๋˜๋Š” ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ํฌํ•จ-# 992

  • ๋ณตํ•ฉ ๋ช…๋ น ์ค„ ์ธ์ˆ˜ (# 6467) ๋ฐ ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•œ ๋น„ ๋งค๊ฐœ ๋ณ€์ˆ˜ ํ† ํฐ (# 6291, # 6292 ๋ฐ # 6360)์˜ ์ผ๊ด€๋˜์ง€ ์•Š๊ณ  ๋†€๋ผ์šด ๊ตฌ๋ฌธ ๋ถ„์„

  • https://github.com/PowerShell/PowerShell/issues/2035#issuecomment -323816221์— ์„ค๋ช… ๋œ๋Œ€๋กœ ValueFromRemainingArguments ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  # 5955 ๋ฐ # 5122์— ํ‘œ์‹œ๋œ ์ค‘๋‹จ ๋œ ๋™์ž‘์ด ์žˆ์Šต๋‹ˆ๋‹ค. https ๋กœ ๋Œ์•„ ๊ฐ€๊ธฐ

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

์ž‘์„ฑ ๋‚ ์งœ :

PowerShell Core v6.0.2
Issue-Meta

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

์ƒˆ๋กœ์šด .NET ๊ฐœ๋…์„ ์ฑ„ํƒํ•˜์ง€ ์•Š์€ PowerShell์˜ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.

  • ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ์˜ ํ˜•์‹ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์–ธ์–ด ๊ตฌ๋ฌธ # 5146

  • ์œ ํ˜• ์‹œ์Šคํ…œ์— ์ž๋™์œผ๋กœ ํ‘œ์‹œ๋˜๋„๋ก Extension Methods ์— ๋Œ€ํ•œ ์—”์ง„ ์ง€์› (_compiled_ .Net ์–ธ์–ด ์—์„œ์ฒ˜๋Ÿผ) # 2226

  • ๋น„๋™๊ธฐ API # 6716 (๋ฐ RFC )์— ๋Œ€ํ•œ ์–ธ์–ด ์ง€์›

๋ช‡ ๊ฐ€์ง€ ์œ ๊ฐ์Šค๋Ÿฌ์šด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜•์‹ ์ง€์ • ๊ฐœ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” cmdlet ๋Œ€์‹  ํ˜•์‹ ํžŒํŠธ (์˜ˆ : @KirkMunro ์˜ FormatPx )๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? # 4594 # 4237 # 3886

  • ์†์„ฑ ์ œ๊ณต์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฐ๋ชจ์ฒ˜๋Ÿผ ๋Š๋ผ์ง€ ์•Š๊ณ  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ œ๊ณต์ž๋ฅผ _content_ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๊ทœํ™” ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? # 5444

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

๋” ํฐ ์งˆ๋ฌธ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” "๋งŽ์€ ๋ฐฉ๋ฒ•์ด ๋” ๋‚ซ๋‹ค"๋ผ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•˜๊ณ  "์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด"์ ‘๊ทผ ๋ฐฉ์‹์„ ์—ฐ๊ตฌ ํ•  ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, "์‰ฌ์šด ๋ฐฉ๋ฒ•"์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€๋งŒ ๊ทผ๋ณธ์ ์œผ๋กœ ๋” ๋‚˜์œ ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜์—ฌ "์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•"๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ• ๊นŒ์š”? ์˜ˆ :

  • CmdletBinding์„ ํ•ญ์ƒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •
  • @ () ํ‘œ๊ธฐ๋ฒ•์€ List[PSObject] ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • @ {}๋ฅผ Dictionary[PSObject, PSObject] (๋˜๋Š” Dictionary[string, PSObject] ๐Ÿ˜ฒ)๋กœ ์ง€์ •
  • _Process_๋ฅผ ๊ธฐ๋ณธ ๋ธ”๋ก์œผ๋กœ ์„ค์ •
  • ์–ด์ฉŒ๋ฉด _ValueFromPipelineByPropertyName_์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ;-)

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

ํฅ๋ฏธ ๋กญ๊ตฐ. ์ €๋Š” .ps1 ์˜ 1 ๊ฐ€ PowerShell ์Šคํฌ๋ฆฝํŠธ์— ์ผ์ข…์˜ ์˜๋ฏธ ์ฒด๊ณ„ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๋ฅผ ํ•ญ์ƒ ๊ถ๊ธˆํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด .NET ๊ฐœ๋…์„ ์ฑ„ํƒํ•˜์ง€ ์•Š์€ PowerShell์˜ ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“ญ๋‹ˆ๋‹ค.

  • ์ œ๋„ค๋ฆญ ๋ฉ”์„œ๋“œ์˜ ํ˜•์‹ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์–ธ์–ด ๊ตฌ๋ฌธ # 5146

  • ์œ ํ˜• ์‹œ์Šคํ…œ์— ์ž๋™์œผ๋กœ ํ‘œ์‹œ๋˜๋„๋ก Extension Methods ์— ๋Œ€ํ•œ ์—”์ง„ ์ง€์› (_compiled_ .Net ์–ธ์–ด ์—์„œ์ฒ˜๋Ÿผ) # 2226

  • ๋น„๋™๊ธฐ API # 6716 (๋ฐ RFC )์— ๋Œ€ํ•œ ์–ธ์–ด ์ง€์›

๋ช‡ ๊ฐ€์ง€ ์œ ๊ฐ์Šค๋Ÿฌ์šด ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ˜•์‹ ์ง€์ • ๊ฐœ์ฒด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” cmdlet ๋Œ€์‹  ํ˜•์‹ ํžŒํŠธ (์˜ˆ : @KirkMunro ์˜ FormatPx )๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? # 4594 # 4237 # 3886

  • ์†์„ฑ ์ œ๊ณต์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋ฐ๋ชจ์ฒ˜๋Ÿผ ๋Š๋ผ์ง€ ์•Š๊ณ  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ œ๊ณต์ž๋ฅผ _content_ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๊ทœํ™” ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? # 5444

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

๋” ํฐ ์งˆ๋ฌธ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” "๋งŽ์€ ๋ฐฉ๋ฒ•์ด ๋” ๋‚ซ๋‹ค"๋ผ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•˜๊ณ  "์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด"์ ‘๊ทผ ๋ฐฉ์‹์„ ์—ฐ๊ตฌ ํ•  ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ๋ง์€, "์‰ฌ์šด ๋ฐฉ๋ฒ•"์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€๋งŒ ๊ทผ๋ณธ์ ์œผ๋กœ ๋” ๋‚˜์œ ๊ธฐ๋Šฅ์„ ์ œ๊ฑฐํ•˜์—ฌ "์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•"๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ• ๊นŒ์š”? ์˜ˆ :

  • CmdletBinding์„ ํ•ญ์ƒ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •
  • @ () ํ‘œ๊ธฐ๋ฒ•์€ List[PSObject] ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  • @ {}๋ฅผ Dictionary[PSObject, PSObject] (๋˜๋Š” Dictionary[string, PSObject] ๐Ÿ˜ฒ)๋กœ ์ง€์ •
  • _Process_๋ฅผ ๊ธฐ๋ณธ ๋ธ”๋ก์œผ๋กœ ์„ค์ •
  • ์–ด์ฉŒ๋ฉด _ValueFromPipelineByPropertyName_์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค ;-)

๋ชจ๋“  ํ›Œ๋ฅญํ•œ ์ œ์•ˆ, @Jaykul.

@() ํ‘œ๊ธฐ๋ฒ•์„ ๋‹ค์‹œ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ List[PSObject] ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. : ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๋” ์ทจํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์ปฌ๋ ‰์…˜ ์œ ํ˜•์„ PowerShell์˜ ๊ธฐ๋ณธ ์ปฌ๋ ‰์…˜ ์œ ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ [object[]] ์–ด๋””์—์„œ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ (๊ทธ๋ฆฌ๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜ํ™˜ ํ•  ๋•Œ๋„ ์‚ฌ์šฉ๋˜๋ฉฐ, ์œ ํ˜• ๋ณ€ํ™˜ ์„ฑ๋Šฅ ์ €ํ•˜์—†์ด) + ์‚ฌ์šฉ์—๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์ง€๋งŒ @PetSerAl์€์ด ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ์ง€์ • ๋ชฉ๋ก ๊ตฌํ˜„์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค .

Process {} ๋ฅผ ํ•จ์ˆ˜์˜ ๊ธฐ๋ณธ ๋ธ”๋ก์œผ๋กœ ๋‹ค์‹œ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ œ์ณ๋‘๊ณ  : ํ˜„์žฌ Filter ์ด ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด์ง€๋งŒ-๋ฌต์‹œ์ - Process ๋ธ”๋ก ๋ฐ์ด ํ•จ์ˆ˜ ๋ณ€ํ˜•์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๊ฒ‰๋ณด๊ธฐ์—๋Š” ์‹ค์ œ๋กœ๋Š” ์žกํžˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Function ์˜ ๋งฅ๋ฝ์—์„œ ๋‘ ๊ฐ€์ง€๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์žฌ๋ฏธ์žˆ๊ฒŒ๋„, ์ง€๊ธˆ Azure PowerShell ์ปค๋ฎค๋‹ˆํ‹ฐ ์Šคํƒ ๋“œ ์—… ํ˜ธ์ถœ์—์„œ ๊ทธ๋“ค์€ AzureRm์—์„œ ํฌ๋กœ์Šค ํ”Œ๋žซํผ (๋ณ„๋„์˜ AzureRm.Core ์—†์Œ)์ด๊ณ  ๋ชจ๋“  ๋ช…๋ น ์ ‘๋‘์‚ฌ๊ฐ€ AzureRm์—์„œ Az๋กœ ๋ณ€๊ฒฝ๋œ ์ƒˆ๋กœ์šด Az ๋ชจ๋“ˆ๋กœ ์ด๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ์‚ฌ๋žŒ์€ ์ž ์‹œ ๋™์•ˆ ๋‚˜๋ž€ํžˆ์žˆ์„ ๊ฒƒ์ด์ง€๋งŒ ์ƒˆ๋กœ์šด ๋ช…๋ น ์„ธํŠธ๋กœ ์ด๋™ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ๋‚˜์œ PowerShell์€ ์•„์ง Windows PowerShell๊ณผ ๋‚˜๋ž€ํžˆ ์‹คํ–‰๋˜๋Š” ์ƒˆ ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ค ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์ง€๋งŒ,์ด๋ฅผ ๋Œ์–ด ๋‚ด๋ฆฌ๋Š” ๋ ˆ๊ฑฐ์‹œ ๋ฌธ์ œ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ๊ฐ€๋ฉด ์–ด๋–ป๊ฒŒ ๋ ์ง€ ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค.
ํ˜„์‹ค์ ์œผ๋กœ ๋งํ•˜๋ฉด 'ํ›„ํšŒ ์—†์Œ'๋ฒ„์ „์„ ๋‚ด๋†“๋Š” ๋ฐ ์ตœ์†Œ 6 ๊ฐœ์›”์˜ ์ง‘์ค‘์  ์ธ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋ฉฐ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋ ค๋ฉด 6 ๊ฐœ์›”์ด ๋” ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํƒ€์‚ฌ ๋ชจ๋“ˆ๋„ ์ด์— ๋งž๊ฒŒ ์กฐ์ •ํ•ด์•ผ์ด ๋ฒ„์ „์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•ฉ๋ฆฌ์  ์ ์šฉ ๋ฒ”์œ„๋ฅผ ํ™•๋ณดํ•˜๋Š” ๋ฐ 6 ๊ฐœ์›” ์ด์ƒ์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค (์ผ๋ถ€ ๋ชจ๋“ˆ์€ ์ ˆ๋Œ€ ์ ์šฉ๋˜์ง€ ์•Š์Œ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค). ์ง€์—ฐ ๋ฐ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ ๋“ฑ ... ๊ทธ๋ž˜์„œ, ํ•œ ๋ฒˆ์— ๋ชจ๋“  ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ํ•œ ๋ฒˆ์— ์—†์•จ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ํฌ๋ง์ ์ธ ์ƒ๊ฐ ์ผ ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์ด์ „ ๋ฒ„์ „์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ์ „ํžˆ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค).

๊ทธ๋Ÿฐ ๋ฒ„์ „์ด ์กด์žฌํ•˜๊ธฐ๋ฅผ ๋ฐ”๋žฌ๋˜๋งŒํผ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋งŒ ์ฒœ์ฒœํžˆ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. v6์—์„œ๋Š” ์ด๋ฏธ ๋งŽ์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ—ˆ์šฉ๋˜์—ˆ์ง€๋งŒ ํ•œ ๋ฒ„์ „์— ๋„ˆ๋ฌด ๋งŽ์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๊ธฐ์กด ์Šคํฌ๋ฆฝํŠธ / ๋ชจ๋“ˆ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ณต์žกํ•ด์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฐ€์น˜์žˆ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€๋งŒ LTS ๋ฒ„์ „์˜ pwsh๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๊ธฐ์กด์˜ ์ฃผ๋ฅ˜ ๋ฒ„์ „๊ณผ ๋ณ‘ํ–‰ํ•˜์—ฌ๋ณด๋‹ค ์‹ค์งˆ์ ์ธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ๋Š” pwsh์˜ ๋‘ ๋ฒˆ์งธ ๊ธฐ์ฐจ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@bergmeister ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ต์‹ฌ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋น„๊ต์  ์ž‘์€ ๋ณ€๊ฒฝ์กฐ์ฐจ๋„ ์ฑ„ํƒ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐฉํ•ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ด์ฌ 3์„๋ณด์„ธ์š”. ์‹ค์ œ๋กœ ๋”ฐ๋ผ ์žก๋Š” ๋ฐ 10 ๋…„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋” ํฐ ๋ณ€ํ™”๋กœ ์ธํ•ด Perl 6์ด ์šฐ์œ„๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋ˆ„๊ฐ€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฐฉ๋ฒ•๊ณผ ์šฉ๋„๋กœ ์ธํ•ด ์ •๊ธฐ์ ์œผ๋กœ ๋ฌผ๊ฑด์„ ๋ถ€์ˆ˜์‹ญ์‹œ์˜ค.

Python 3์€ ํ™•์‹คํžˆ ๊ณตํฌ์˜ ์‡ผ์ž…๋‹ˆ๋‹ค. ์•„์ง ์‹ค์ œ๋กœ ์‚ฌ์šฉ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์•„์ง 2.7์„ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ๊ณง ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ๊ทผ์—๋„ Perl 6์— ๋Œ€ํ•ด ๋งŽ์ด ๋“ฃ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ...

ํŒŒ์ด์ฌ์—์„œ ๋ฐฐ์šธ ์ˆ˜์žˆ๋Š” ๊ตํ›ˆ์€ ์—”์ง„์˜ ๋ฒ„์ „ ๋ณ€๊ฒฝ์—์„œ ์–ธ์–ด์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์„ค ์ ์œผ๋กœ PS 7 ์—”์ง„์€ ์ค‘๋‹จ์—†๋Š” ๋ณ€๊ฒฝ ๋ชจ๋“œ์—์„œ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ (.PS1) ํŒŒ์ผ์„ ๊ณ„์† ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋ฐ˜๋ฉด, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ 7 ์ธ์‹ (์˜ˆ : .PS7 ํ™•์žฅ์ž)์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉด ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๊ณ  ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ PS 7์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ตœ๊ณ ์˜ ์„ฑ๊ณต ์‚ฌ๋ก€๋Š” JavaScript / TypeScript / Babel ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ๋žœ์Šค ํŒŒ์ผ๋Ÿฌ (์†Œ์Šค ๋งต ์ง€์› ํฌํ•จ)๋Š” ์–ธ์–ด ์ง„ํ™”๋ฅผ์œ„ํ•œ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์— ๊ฑฐ์˜ ์ง‘์ฐฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์Šค ํŒŒ์ผ์ด ์ •๋ง๋กœ ์œ ์ผํ•œ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. Typescript๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์ด์žˆ๋Š” "๋‹จ์ง€"Javascript์ด๋ฏ€๋กœ ์‚ฌ๋žŒ๋“ค์ด ์‰ฝ๊ฒŒ ์ฑ„ํƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์ด๋ฏ€๋กœ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— Dart๋Š” ์ž์ฒด ์–ธ์–ด์ด์ง€๋งŒ ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” Chrome์˜ ๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค (์ ์–ด๋„ ํ•œ ์‹œ์ ์—์„œ ๊ณ„ํš์ด์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค). Dart๋Š” ์ž์ฒด ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— Google ์™ธ๋ถ€์—์„œ ๋งŽ์ด ์ฑ„ํƒ๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฟก ๋นต๋€จ

Python 3์€ ํ™•์‹คํžˆ ๊ณตํฌ์˜ ์‡ผ์ž…๋‹ˆ๋‹ค. ์•„์ง ์‹ค์ œ๋กœ ์‚ฌ์šฉ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

ํ•„์ž๋Š” ์ง€๋‚œ์ฃผ์— ์ €์ž๊ฐ€ Python 3์— ๋Œ€ํ•ด ์ž„๊ณ„ ๊ฐ’์„ ๋‹ฌ์„ฑํ–ˆ๋‹ค๊ณ  ์ฃผ์žฅํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•ต์‹ฌ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ด์ œ๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ด์ฃผํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ณด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค..

ํฅ๋ฏธ ๋กญ๊ตฐ. ๋‚˜๋Š” ํ•ญ์ƒ .ps1์˜ 1์ด PowerShell ์Šคํฌ๋ฆฝํŠธ์— ์ผ์ข…์˜ ์˜๋ฏธ ๋ก ์  ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์–ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋งž๊ฒŒ ์กฐ์ •๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ์ด์œ ๋ฅผ ๊ถ๊ธˆํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

WRT .ps1 , ์–ธ์–ด๊ฐ€ ์™„์ „ํžˆ ์ž˜๋ชป๋˜์–ด ๋Ÿฐํƒ€์ž„์— ์น˜๋ช…์ ์ธ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜์—ฌ ์ด์ „ ๋ฒ„์ „์˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ™•์žฅ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ™•์žฅ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒํƒœ๊ณ„์˜ ๋งŽ์€ ๊ฒƒ๋“ค์ด ํ™•์žฅ์— ๋ฌถ์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—„์ฒญ๋‚œ ์ž‘์—… ๋”๋ฏธ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ€๋ณ๊ฒŒ ํ•  ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌผ๋ก  Windows์˜ ์ผ๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ ๊ธฐ๋Šฅ์„ ํฌํฌํ•ด๋„ ๋‘ ๋ฒ„์ „์„ ๋ชจ๋‘ ์œ ์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (Python 2/3๊ณผ ๋น„์Šท ํ•จ).

@bergmeister :

์œ ํšจํ•œ ์šฐ๋ ค ์‚ฌํ•ญ์ด์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •์‹ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ๊ฐ€์น˜์žˆ๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์—ผ๋‘์—๋‘๊ณ ์žˆ๋Š” ๊ฒƒ์„ ๊ณต์œ ํ•˜์‹ญ์‹œ์˜ค.

์ฒœ์ฒœํžˆ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ๋ณ€๊ฒฝ

ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ (์–ดํœ˜ ์ ์œผ๋กœ ๋ฒ”์œ„๊ฐ€ ์ง€์ •๋œ) ์˜ตํŠธ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ํ•ด๊ฒฐ์ฑ…์ด์ง€๋งŒ ๋‘ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ์šฐ๋ คํ•ฉ๋‹ˆ๋‹ค.

  • ๋‹จํŽธ์ ์ธ ์†Œ๊ฐœ๋Š” ์–ด๋–ค ๊ธฐ๋Šฅ์— ์–ด๋–ค ๋ฒ„์ „์ด ํ•„์š”ํ•œ์ง€ ์•„๋ฌด๋„ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Perl (v5-)์ด ๋–  ์˜ค๋ฆ…๋‹ˆ๋‹ค.

  • ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์ปค์ง€๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์–ด๋ ค์›Œ์ง€๊ณ  ๊ทธ ๊ฒฐ๊ณผ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋˜‘๊ฐ™์ด ์ปค์ ธ์„œ (์ ์–ด๋„) ์‹œ์ž‘ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ „์— ๋งํ–ˆ์—ˆ๋‹ค : ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋‹จ์ง€ ์˜ˆ๊ฐ ์ผ ๋ฟ์ด๋‹ค. v6 GA๋Š” ์œ ๋‹‰์Šค ์„ธ๊ณ„์—์„œ ์ฑ„ํƒ์„ ๋ฐฉํ•ด ํ•  ์ˆ˜์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ์ง์„ ์ „๋‹ฌํ•˜๋ฉด์„œ ๋ณ€ํ™”๋ฅผ ๊นจ๋Š” ๊ฒƒ์— ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ๋…ธ์ธ๋“ค์„ ๋งŒ๋“œ๋Š” ๋ถˆํ–‰ํ•œ ํƒ€ํ˜‘์ด์—ˆ๋‹ค.

์ฆ‰, Unix [์™€ ์œ ์‚ฌํ•œ] ์„ธ๊ณ„์—์„œ PowerShell์˜ ์ƒ๋Œ€์ ์ธ ์ Š์Œ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ์˜์ง€๊ฐ€ ๋” ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. @BrucePay๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด Windows PowerShell์€ ์–ด์จŒ๋“  ์œ ์ง€ ๊ด€๋ฆฌํ•ด์•ผํ•˜๋ฉฐ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„์œ„ํ•œ ์•ˆ์ „ํ•œ ํ”ผ๋‚œ์ฒ˜๋กœ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๋Ÿฌํ•œ ํš๊ธฐ์ ์ธ ๋ณ€ํ™”์˜ ๋ถ€์ •์ ์ธ ๊ฒฐ๊ณผ์˜ ๊ทœ๋ชจ๊ฐ€ ์ด๋ฏธ ๋‹ค๋ฃจ์–ด ์กŒ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์š”์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋” ํฐ ๋งฅ๋ฝ์—์„œ ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๊ฐ€ ์• ์ดˆ์— ์ƒ๋‹นํ•œ ์ด์ ์„ ๊ฐ€์ ธ๋‹ค ์ค„์ง€ ์˜์‹ฌ์Šค๋Ÿฌ์›Œ์„œ์ด ๊ธ€์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ๋‚ด๊ฐ€ PowerShell์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š”.

OP์—๋Š” ๋‹ค์Œ ๋ฌธ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ํ•œํŽธ, ํ”ผํ•  ์ˆ˜์—†๋Š” ๋ถ€์‚ฐ๋ฌผ์€ ์˜ˆ์™ธ๋ฅผ ์•”๊ธฐํ•ด์•ผํ•˜๋Š” ๊ธฐ์ˆ ์  ๋ถ€์ฑ„์˜ ์ถ•์ ์ด๋ฉฐ ์‹ ๊ทœ ์ด๋ฏผ์ž์—๊ฒŒ๋Š” ์žฅ๋ฒฝ์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

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

์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๋งŽ์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋‹ค์†Œ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์–ธ์–ด์˜ ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋†€๋ผ์šด ์ธก๋ฉด์ด ๋งŽ์ด ๋‚จ์•„์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. PowerShell์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ๋ช‡ ๋…„์„ ๋ณด๋ƒˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์ €๋Š” ์„ค๊ณ„ ์ƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์•„๋งˆ๋„ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” PowerShell ๋™์ž‘์— ์—ฌ์ „ํžˆ ์ž์ฃผ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ๋– ์˜ค๋ฅด๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • [scriptblock] ์ธ์ˆ˜์˜ ์กฐ๊ฑด๋ถ€ ์ง€์—ฐ ๋ฐ”์ธ๋”ฉ (# 6419)
  • ์ •ํ™•ํžˆ ์•”์‹œ ์  ์—ด๊ฑฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ (# 5832)
  • ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ ์ค‘ [AutomationNull]::Value ์—์„œ $null (# 6357 ๊ด€๋ จ๋จ)
  • ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ์ œ์–ด ํ๋ฆ„์— ๋Œ€ํ•œ break ๋ฐ continue ์˜ ์˜ํ–ฅ (# 5811)
  • $null ( SO )๋ฅผ ํ‘œ์‹œํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?
  • ์„ธ์…˜ ์ƒํƒœ์—์„œ ์Šคํฌ๋ฆฝํŠธ ๋ธ”๋ก์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด $_ ( SO 1 , SO 2 )์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

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

  1. PowerShell์—์„œ ๊ฐœ์„  ํ•  ์ˆ˜์—†๋Š” ๋™์ž‘์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  2. PowerShell์„ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋•Œ ๋ชจ๋“  ์˜๋ฏธ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๋ฐœ๊ฒฌ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฑด ๊ดœ์ฐฎ์•„์š”. ๋†€๋ผ์šด PowerShell ๋™์ž‘์˜ ์••๋„์  ๋Œ€๋ถ€๋ถ„์€ PowerShell์„ ์‚ฌ์šฉํ•œ ์„ฑ๊ณต์— ์ง€์†์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋†€๋ผ์šด ๋™์ž‘์€ ๊ฑฐ์˜ ํ•ญ์ƒ ๊ฐœ๋ฐœ ์ค‘์— ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ฆ‰์‹œ ํฌ์ฐฉ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋น ์ ธ ๋‚˜๊ฐ€๋Š” ๊ฒƒ๋“ค๋กœ๋ถ€ํ„ฐ ๋ฐฐ์šฐ๊ณ  ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ŠคํŠธ ์ „๋žต์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋†€๋ผ์šด ํ–‰๋™์ด ์ œ๊ฑฐ ๋  ์ˆ˜์žˆ๋Š” ์ข…๋ฅ˜์ด๋“ , ๋‚จ์•„ ์žˆ์–ด์•ผํ•˜๋Š” ์ข…๋ฅ˜์ด๋“  ์ƒ๊ด€์—†์ด ์ด๋Š” ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ์ œ์•ˆ ๋œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด PowerShell์€ ํ…Œ์ŠคํŠธ ๋ฒ”์œ„๋ฅผ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜์žˆ์„ ์ •๋„๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ์ œ๊ฐ€ PowerShell์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์—์„œ๋Š” ์œ„์—์„œ ์ œ์•ˆํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ์ด์ ์ด ๋งŽ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

(BTW, ์ง์ ‘์ด ์งˆ๋ฌธ์„ ํ•ด์ฃผ์‹  @ mklement0 ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•œ๋™์•ˆ ์ œ ๋งˆ์Œ ์†์—์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋‘๊ฐ€ ์ž์‹ ์˜ ์ž‘ํ’ˆ์„ ๋งํ•  ์ˆ˜์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ๋ณด๊ฒŒ๋˜์–ด

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @ alx9r.

_intrinsic_ complex์™€ _extrinsic_ complex๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • _Intrinsic_ ๋ณต์žก์„ฑ์€ ๊ตฌํ˜„๋˜๋Š” ๊ฐœ๋…์˜ ๊ณ ์œ  ํ•œ ๋ณต์žก์„ฑ์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. PowerShell์˜ ๊ฒฝ์šฐ์—๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. _internal_ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„ ๋„์ž… (๊ฐ์ฒด ๊ธฐ๋ฐ˜ ํŒŒ์ดํ”„ ๋ผ์ธ)๊ณผ ๋‘ ๊ฐœ์˜ ๋ณ„๊ฐœ ์„ธ๊ณ„ (์…ธ ๊ตฌ๋ฌธ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๊ตฌ๋ฌธ)๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ณต์žก์„ฑ ), _external_ ๋ณต์žก์„ฑ์€ ์—ฌ๋Ÿฌ ์ด์งˆ์ ์ธ ์™ธ๋ถ€ ์„ธ๊ณ„์™€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • _Extrinsic_ ๋ณต์žก์„ฑ์€ ์œ ์ถœ ๋œ ์ถ”์ƒํ™”์™€ ๋ถˆ์ผ์น˜์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค.

    • ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์€ _ ์ œ๊ฑฐ _๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
    • ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ด๊ฒƒ์ด ์˜ต์…˜์ด ์•„๋‹Œ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ณต์žก์„ฑ์„ _ ์•Œ๋ ค์ง„ ๋ฌธ์ œ๋กœ ๋ฌธ์„œํ™”ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค _.

    • ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ ๋ณ€์ˆ˜ ๋ฒ”์œ„ ์ง€์ • ๋™์ž‘ ( $_ ์˜ ์ปจํ…์ŠคํŠธ์—์„œ ์ฐธ์กฐ)์€ ๋‹จ์ˆœํ•œ ๊ธฐ์ด ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด์ „์— ์–ธ๊ธ‰ ํ•œ # 4568๊ณผ ๊ฐ™์€ ์ฃผ์š” ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ์ž…๋‹ˆ๋‹ค.

    • ๋‹น์‹ ์ด ์–ธ๊ธ‰ ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฌธ์ œ๋“ค์€ ๋ช…๋ฐฑํ•œ (๋ฌธ์„œํ™” ๋œ) ๊ทผ๊ฑฐ ๋‚˜ ์ด์ต์ด์—†๋Š” ๋ถˆ์ผ์น˜๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— (์ฃผ์˜ ๊นŠ์€ ๋””์ž์ธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์•„๋‹ˆ๋ผ) ์™ธ์ ์ธ ๋ฒ”์ฃผ์— ์†ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

      • $null ๋กœ splattingํ•˜์—ฌ ์œ„์น˜ $null ์ธ์ˆ˜๋ณด๋‹ค _no_ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.
      • ์™œ ๊ฒƒ [System.Management.Automation.Internal.AutomationNull]::Value ๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜ $null ์œ ํ˜•์ด _direct ๋ณ€์ˆ˜ assignment_์— ๋ณด์กด๋˜์–ด ์žˆ์–ด๋„, _parameter์˜ binding_ ๋™์•ˆ? https://github.com/PowerShell/PowerShell/issues/9150#issuecomment -473743805๋ฅผ ์ฐธ์กฐ
      • ๋‘˜๋Ÿฌ์‹ธ๋Š” ๋ฃจํ”„๊ฐ€์—†๋Š” ๊ฒฝ์šฐ _quiet ์ข…๋ฃŒ _๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ถœ ์Šคํƒ ์ „์ฒด์—์„œ break ๋ฐ continue ์˜ _dynamic_ ๋ฒ”์œ„ ์ง€์ •์— ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ๊ณผ ์„œ๋กœ ๋‹ค๋ฅธ ์„ธ๊ณ„์˜ ๊ฒฐํ•ฉ๋งŒ์œผ๋กœ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  _ ๋‚ด์žฌ์  _ ๋ณต์žก์„ฑ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต์ง€๋งŒ _ ์™ธ ์žฌ์  _ ๋ณต์žก์„ฑ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜๋„ ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์‹ ๋ขฐํ•˜์ง€ ์•Š๊ณ  ๋จผ์ € ํ…Œ์ŠคํŠธํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ (๋˜๋Š” ๋†€๋ผ์šด ๋™์ž‘์œผ๋กœ ์ธํ•ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ)๋Š” ์‹ฌ๊ฐํ•œ ์ƒ์‚ฐ์„ฑ (๋ฐ ์ฆ๊ฑฐ์›€) ์žฅ์• ์ž…๋‹ˆ๋‹ค (PowerShell์„ ์‚ฌ์šฉํ•˜๋ฉด ๋Œ€ํ™” ํ˜• ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ).

ํ™•์‹คํ•œ ๊ฐœ๋… (์ง๊ด€์  ์ธ ๊ธฐ๋Œ€์— ์–ด๊ธ‹๋‚˜์ง€ ์•Š๋Š”), ์„ค๋ช…์ ์ธ ์ด๋ฆ„ ์ง€์ • ๋ฐ ์ข‹์€ ๋ฌธ์„œ๋กœ ๊ท€๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

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

๋”ฐ๋ผ์„œ _ ์™ธ์  ๋ณต์žก์„ฑ ์ œ๊ฑฐ๊ฐ€ ์„ ํƒ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ผ๊ณ  ๊ฒฐ์ •ํ•˜๋”๋ผ๋„ ์ตœ์†Œํ•œ _ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฌธ์„œํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.-์—ฌ๊ธฐ์„œ ๋…ผ์˜๋Š” "ํ•จ์ • ๊ฐค๋Ÿฌ๋ฆฌ"๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ์ถœ๋ฐœ์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ”ผํ•  ์ˆ˜์—†๋Š” _ ๋‚ด์žฌ์  ๋ณต์žก์„ฑ์˜ ๊ฒฝ์šฐ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Œ). ๋†€๋ผ ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์šฐ๋ฆฌ๋Š” ์ ์–ด๋„ ์ฒด๊ณ„์ ์œผ๋กœ ๋ฌธ์„œํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋…ผ์˜๋Š” "ํ•จ์ • ๊ฐค๋Ÿฌ๋ฆฌ"๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ์œ„ํ•œ ์‹œ์ž‘์ ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Roman Kuzmin์€ https://github.com/nightroman/PowerShellTraps ์—์„œ ํ•œ๋™์•ˆ ๊ทธ๋Ÿฌํ•œ ๊ฐค๋Ÿฌ๋ฆฌ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, @HumanEquivalentUnit- ํ›Œ๋ฅญํ•œ ์ปฌ๋ ‰์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ์—์„œ ์ˆ˜์ง‘ ๋œ ๋ฌธ์ œ์™€ ํ•จ๊ป˜ _official_ ๋ฌธ์„œ์˜ ์ผ๋ถ€์ธ ๊ฐค๋Ÿฌ๋ฆฌ์˜ ๊ธฐ์ดˆ๋ฅผ ํ˜•์„ฑ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ํ•ญ๋ชฉ์„ ์ ์ ˆํ•˜๊ฒŒ ๋ณด๊ฐ• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํ–‰๋™ ์ผ์ง€ ๋ชจ๋ฅด์ง€๋งŒ ๊ฒฐ๊ตญ ๊ทธ ํ–‰๋™์ด ์ •๋‹นํ™”๋˜๋Š” ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์„ค๊ณ„ ๊ทผ๊ฑฐ (์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑ๋œ ์„ค๋ช…์œผ๋กœ ์ธํ•ด ๋†€๋ผ์›€์˜ ์š”์†Œ๊ฐ€ ์‚ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ)

  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ธ์ •

    • ๋‘˜ ์ค‘ ํ•˜๋‚˜ : ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์ˆ˜์ •๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ๋˜๋Š” : ๋ฏธ๋ž˜์˜ ๋ณ€ํ™”๊ฐ€ ๊ณ ๋ ค๋˜๊ณ  ์žˆ์Œ
    • ๋˜๋Š” : PS _Core_์—์„œ ๋ฌธ์ œ๊ฐ€ ์ด๋ฏธ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

_ "PowerShell vZeroTechnicalDebt"์‹œ๊ฐ„์ด๋˜์—ˆ๋Š”์ง€ ๋ฌผ์–ด๋ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค ._

์ด๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฒ„์ „ ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์—์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๊นจ์ง€๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์–ป๋Š” ์œ ์ผํ•œ ๊ณ ํ†ต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์€ ์ฐจ์ด์ ์„ ์—ฐ๊ตฌํ•˜๊ณ  ๋ฐฐ์›Œ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” (๋งˆ์ง€๋ง‰์œผ๋กœ) ํ”Œ๋žซํผ์„ ์–ป์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”์–ด์—์„œ ๋ฐ˜๋ณต ํ•  ๋•Œ๋งˆ๋‹ค ์‹ค์ œ๋กœ ๋” ์ข‹์•„์ง‘๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ์š”, ์ƒˆ๋กœ์šด ๋…ธํ•˜์šฐ์™€ ๊ธฐ์ˆ ๋กœ ์ž˜๋ชป๋œ ์„ค๊ณ„์™€ ๊ฒฐ์ •์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ์ฝ” ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฃฝ์€ ๋ง์—์„œ ์‚ด์•„์žˆ๋Š” s ** t๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ํ˜ธ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ํŒŒ์ผ ์‹œ์Šคํ…œ๊ณผ ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ณต๊ธ‰์ž ์‚ฌ์ด์˜ ๋งˆ๋ฒ•์ ์ธ ์ฐจ์ด์ ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž˜ ์ž‘๋™ํ•˜๋Š” ํ•จ์ˆ˜ ๋˜๋Š” cmdlet์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ต‰์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฏธ๋ฌ˜ํ•œ ์ฝ”๋“œ๋Š” ์ž‘์„ฑํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์ข…์ข… ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋‚ด๊ฐ€ 7 ~ 8 ๋…„ ์ „์— ๋Œ€๋‹ต ํ•œ stackoverflow์— ๋Œ€ํ•œ ๊ฒŒ์‹œ๋ฌผ์ด ์—ฌ์ „ํžˆ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

https://stackoverflow.com/questions/8505294/how-do-i-deal-with-paths-when-writing-a-powershell-cmdlet

์ฐธ๊ณ  : # 8495

์ˆ˜์ •ํ•ด์•ผ ํ•  ์ด์ƒํ•œ ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„ ๊ทœ์น™์ด ์žˆ์Šต๋‹ˆ๋‹ค.

PS> 1, 2, 2 + 1, 4, 4 + 1
1
2
2
1
4
4
1

๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

1
2
3
4
5

๊ณ ์œ  ํ•œ ์žฅ์ ๊ณผ ๋‹จ์ ์ด์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ์˜ต์…˜์€ ๋ชจ๋“  "์ด์ƒ์ ์ธ"๋™์ž‘์„ ํ™œ์„ฑํ™”ํ•˜์—ฌ ์„ ํƒํ•˜๋„๋กํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ๋Ÿ‰์ด ์ƒˆ๋กœ์šด ๋™์ž‘์œผ๋กœ ์ด๋™ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์›๊ฒฉ ๋ถ„์„์ด์žˆ๋Š” ๊ฒฝ์šฐ์ด๋ฅผ ๋’ค์ง‘์–ด์„œ ์˜ตํŠธ ์•„์›ƒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋ชจ๋ธ์ด ์ž‘๋™ํ•˜๋Š” ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ๋ณธ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋ชจ๋‘ ํŒŒ์ดํ”„ ๊ฟˆ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์€ _nice_ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์“ฐ๋ ˆ๋“œ์—์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ์ •๋“ค ์ค‘ ์ผ๋ถ€์˜ ์™„์ „ํ•œ _splitting_ ํŠน์„ฑ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ž ์žฌ์ ์œผ๋กœ "normal"๊ณผ "experimental"์‚ฌ์ด์˜ ์Šคํฌ๋ฆฝํŠธ์˜ ํ˜ธํ™˜์„ฑ์„ ์ž ์žฌ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ _splitting_ ํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ด ํ™œ์„ฑํ™” ํ•œ ํ”Œ๋ž˜๊ทธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ฐ ๋ชจ๋“ˆ ๋ฒ”์œ„์— ๋”ฐ๋ผ ํŠน์ • ์‹คํ—˜ ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™” ๋ฐ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ๋” ๋ณต์žกํ•˜๊ฒŒ ํ•  ๋ฟ์ด๋ผ๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ, ๊ทธ๊ฒƒ์ด ํŠนํžˆ ํ›Œ๋ฅญํ•œ ์†”๋ฃจ์…˜์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@ vexx32 ๋Š” ๋ช…ํ™•ํ•˜๊ฒŒ experimental ํ”Œ๋ž˜๊ทธ๋ฅผ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ญ”๊ฐ€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ๋‹ค (๊ณต์‹์ ์œผ๋กœ ์ง€์› ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋งˆ๋„ Enable-PSFeature ์™€ ๋น„์Šทํ•  ๊ฒƒ์ด๋‹ค (๋”ฐ๋ผ์„œ ์‹คํ—˜์  ๊ธฐ๋Šฅ๊ณผ๋Š” ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋จ)). ๋‚˜๋Š” ๋˜ํ•œ ๋‹น์‹ ์ด ์ด๋Ÿฌํ•œ ์ƒˆ๋กœ์šด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ๊ฐ€ ์•„๋‹Œ ์„ธํŠธ๋กœ ์„ ํƒํ•˜๋Š” ๋‹จ์ผ ํ”Œ๋ž˜๊ทธ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์•„, ๊ทธ๋ ‡๋‹ค๋ฉด ... ๋„ค, ๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋‚˜์˜ ์šฐ์‚ฐ ์•„๋ž˜์— ๋ชจ๋“  ๊ฒƒ์„ ๊น”๋”ํ•˜๊ฒŒ ํฌ์žฅํ•˜๊ณ  ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ๋‹ค! ๐Ÿ˜„

# 8512๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์—ฌ๊ธฐ์— ์ปดํŒŒ์ผ ๋œ ๋ฌธ์ œ ๋ชฉ๋ก์— @ jszabo98 ์ถ”๊ฐ€ :

-and ๋ฐ -or ์˜ˆ๊ธฐ์น˜ ์•Š๊ฒŒ _same_ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š” ๋ฐ˜๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ ์–ธ์–ด (C # ํฌํ•จ)์—์„œ -and ๋Š” -or ๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Œ€์— ์–ด๊ธ‹๋‚˜๋Š” ํ‘œํ˜„์˜ ์˜ˆ :

PS> $true -or $true -and $false
False

left-associativity์™€ -and ๋ฐ -or ์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„๋Š” ์˜ˆ์ƒ๋˜๋Š” $true -or ($true -and $false) ์•„๋‹Œ ($true -or $true) -and $false ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋ชจ๋ธ์ด ์ž‘๋™ํ•˜๋Š” ์‹ค์ œ ์‚ฌ๋ก€๋ฅผ ๋ณธ ์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋ชจ๋‘ ํŒŒ์ดํ”„ ๊ฟˆ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

์‚ฌ์‹ค, ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ „ ์„ธ๊ณ„์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ชจ๋ธ ์ธ LTS๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. MSFT๋Š”์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows 10์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.์ด ๋ชจ๋ธ์€ Unix ๋ฐฐํฌํŒ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ์—๊ฒŒ ์ด๊ฒƒ์€ 2 ๋…„๋งˆ๋‹ค LTS PowerShell Core ๋ฒ„์ „์„ ๋ฆด๋ฆฌ์Šคํ•˜๊ณ  Windows 10 LTS ๋ฒ„์ „๊ณผ Unix LTS ๋ฒ„์ „์— ํฌํ•จ ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” LTS ๋ฒ„์ „์˜ Windows ๋ฐ Unix ๋ฆด๋ฆฌ์Šค ๋‚ ์งœ๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. MSFT๋Š” ์ฃผ์š” Unix ํšŒ์‚ฌ์™€ ํ˜‘์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.)
์ด 2 ๋…„ ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์‚ฌ์†Œํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•˜์—ฌ ๋” ์ค‘์š”ํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋‹ค์Œ ์ฃผ๊ธฐ๋กœ ์ด์ „ํ•ฉ๋‹ˆ๋‹ค.
๊ฐ๊ฐ์˜ ์ƒˆ LTS ๋ฒ„์ „์— ๋Œ€ํ•ด ScriptAnalyzer๋Š” ์Šคํฌ๋ฆฝํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์šฉ์ดํ•˜๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ จ์˜ ์ƒˆ ๊ทœ์น™์„ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค‘์š”ํ•œ ์ œํ’ˆ๊ณผ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ฒ ์ €ํ•œ ํ…Œ์ŠคํŠธ์™€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ›„์— ์ด์ „ ๋ฒ„์ „์—์„œ ๋‹ค์Œ ๋ฒ„์ „์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” PHP 5.x ๋ฒ„์ „์— ๋„๋‹ฌ ํ•  ๋•Œ๊นŒ์ง€ ์ด์ „ ์‹œ์Šคํ…œ์„ PHP 4 ๋ฒ„์ „์—์„œ ๋‹ค์Œ PHP ๋ฒ„์ „์œผ๋กœ ๋‹จ๊ณ„๋ณ„ (๋ฒ„์ „ ๋ณ„) ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ๋•Œ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„์—์„œ ๋‚˜๋Š” ๋น„๊ต์  ์ž‘๊ณ  ๋น ๋ฅธ ๋ณ€๊ฒฝ์„ํ•ด์•ผํ–ˆ๊ณ  ๊ทธ ํ›„ ์‹œ์Šคํ…œ์€ ๋‹ค์Œ ๋‹จ๊ณ„๊นŒ์ง€ ์–ผ๋งˆ ๋™์•ˆ ๊ณ„์† ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : .Net Core LTS ๋ฒ„์ „๊ณผ ๋™๊ธฐํ™”๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. .Net Core 3.1์ด ๋‹ค์Œ LTS๊ฐ€ ๋  ๊ฒƒ์ด๋ฉฐ PowerShell Core 6.x๊ฐ€ ๋ฒ„์ „์— ์žˆ์–ด์•ผ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ? PowerShell Core์— ๋Œ€ํ•œ ์ •๋ง _great_ ์•„์ด๋””์–ด์ฒ˜๋Ÿผ ๋“ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด LTS ๋ฆด๋ฆฌ์Šค ์‚ฌ์ด์˜ ์ค‘๊ฐ„์— ๋„ˆ๋ฌด ๋งŽ์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ์ธํ•ด ๊ณผ๋„ํ•œ ๋ถ€๋‹ด์„์ฃผ์ง€ ์•Š๊ณ  ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜์žˆ๋Š” ์ด์™€ ๊ฐ™์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  : https://github.com/PowerShell/PowerShell/pull/8407#issuecomment -453221566

Get-Variable -ValueOnly -Name myVar | Should -Be $var $var ๊ฐ€ ๋ฐฐ์—ด Get-Variable -ValueOnly -Name myVar | Should -Be $var ์–ด์„ค ์…˜์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” Get-Variable -ValueOnly ์ด WriteObject() ๋Œ€ํ•ด ์—ด๊ฑฐ ์˜ค๋ฒ„๋กœ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ๋‹ค๋ฅด๊ณ  ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ powershell์ด์žˆ๋Š” ๊ฒฝ์šฐ : ์ด๋ฏธ ๋ ˆ๊ฑฐ์‹œ ๋ฐ ์ฝ”์–ด๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ๋œป๋ณด๊ธฐ์—๋Š” ์ข‹์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋ฏธ๋ž˜๋ฅผ์œ„ํ•œ ์ž‘์—… ๋ชจ๋ธ์„ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์™€ ํ•จ๊ป˜์žˆ์–ด ...

Windows ์˜ˆ์•ฝ ์ž‘์—…, ์  ํ‚จ์Šค ๋ฐ ๋งŽ์€ ํ™˜๊ฒฝ์ด powershell ์ฝ”์–ด๋ฅผ ์ธ์‹ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— powershell์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”์–ด pwsh.exe๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • PS ๋ฒ„์ „์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฝ”์–ด๋ฅผ ๊ฐ•์ œ๋กœ ํ˜ธ์ถœ ํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹คํ–‰์ค‘์ธ PS ๋ฒ„์ „์„ ํ™•์ธํ•œ ๋‹ค์Œ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์—์„œ ์ ์ ˆํ•œ PS ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํŠธ๋ฆญ์ด ๋ฌด์—‡์ด๋“ ๊ฐ„์— ์šฐ๋ฆฌ๋Š” ์ข…์ข… ๋ชจ๋“  ํ™˜๊ฒฝ๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ด๋ฏธ ์‹คํ–‰์ค‘์ธ ๋™์ผํ•œ ์Šคํฌ๋ฆฝํŠธ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์œ ๋‹‰์Šค ์ฒ ํ•™์ž…๋‹ˆ๋‹ค. ๋„๊ตฌ๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ์„ํ•˜๊ณ  ์ž˜ ์ˆ˜ํ–‰ํ•˜๋„๋กํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋„๊ตฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ถ€๋ถ„์˜ ํ•ฉ๋ณด๋‹ค ํฐ ์ „์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ๋‹ค๋ฅธ ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์„œ๋ธŒ ์‰˜์„ ํ˜ธ์ถœํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šคํฌ๋ฆฝํŒ…์˜ ์„ธ๊ณ„์ž…๋‹ˆ๋‹ค. ์—ญ์‚ฌ์ ์œผ๋กœ ๊ทธ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŒ…์ž…๋‹ˆ๋‹ค. Powershell์€ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ๋„ค์ดํ‹ฐ๋ธŒ๋กœ ์œ ์ง€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์—ฌ ์ด์ƒํ•œ ๊ทœ์น™์œผ๋กœ ๊ฒฝํ–ฅ์ด ์žˆ์ง€๋งŒ ์ด๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์ด ์•„๋‹Œ ๊ทœ์น™ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. PS๋Š” ์œ ๋‹‰์Šค ์‰˜ ์Šคํฌ๋ฆฝํŠธ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ OS ๋ฐ ๋ชจ๋“  ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์•ก์„ธ์Šคํ•˜์—ฌ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

core์˜ ํŒŒ์ผ ํ™•์žฅ์ž๊ฐ€ .ps6์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด powershell ์—”์ง„์ด ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. powershell์˜ ๊ฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒ„์ „์€ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๋ชจ๋“  ํ˜ธ์ถœ์ด ํ™˜๊ฒฝ์„ ํ†ต๊ณผํ•˜๊ณ  ์ถœ๋ ฅ, ์˜ค๋ฅ˜, ๊ฒฝ๊ณ , ์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฅธ์ชฝ์— ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•œ ๋‹ค๋ฅธ ๋ฒ„์ „๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—”์ง„์ด ์‹คํ–‰ํ•  ๋ฒ„์ „์„ ์•Œ๊ณ ์žˆ๋Š” ํ•œ ์—”์ง„์—์„œ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ด€๋ จ๋œ ์ปจํ…์ŠคํŠธ ์ „ํ™˜์ด ์ด๋ฏธ ์ผ์–ด๋‚˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฏธ ์ตœ์•…์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ž˜ ์ •์˜ ๋œ ๋ฐฉ์‹์œผ๋กœ ์ž‘์—…์„ ์ค‘๋‹จํ•˜์ง€ ์•Š๋Š” ํ•œ ์šฐ๋ฆฌ๋Š” powershell์—์„œ ๋”์ฐํ•œ ํ•ดํ‚น์„ ์˜์›ํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๊ฐ€ ์šฐ๋ฆฌ์˜ ์‚ถ์„ ์ง€๊ธˆ๋ณด๋‹ค ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ์ ์ง„์ ์ด๊ณ  ์ง€์†์ ์ธ ๊ฐœ์„ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์—”์ง„์ด ์ปจํ…์ŠคํŠธ๋ฅผ ์ „ํ™˜ํ•˜๋Š” ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋กํ•˜๋ฉด ์ฝ”๋“œ (๋ฐ ์ˆ˜๋ช…)๊ฐ€ ๋” ์ข‹์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@ jtmoree-kahalamgmt-com ํ”ผ๋“œ๋ฐฑ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์—ด์–ด ๊ฒฝํ—˜๊ณผ ํ”ผ๋“œ๋ฐฑ์„ ๊ณต์œ ํ•˜๊ณ  ์ƒˆ๋กœ์šด ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค.

core์˜ ํŒŒ์ผ ํ™•์žฅ์ž๊ฐ€ .ps6์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜์–ด powershell ์—”์ง„์ด ์šฐ๋ฆฌ๋ฅผ ์œ„ํ•ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://github.com/PowerShell/PowerShell/issues/2013#issuecomment -247987977 ์ฐธ์กฐ

๊ทธ๋ฆฌ๊ณ  ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๋ฐ”ํƒ•์œผ๋กœ https://github.com/PowerShell/PowerShell/issues/9138์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Python 3์€ ํ™•์‹คํžˆ ๊ณตํฌ์˜ ์‡ผ์ž…๋‹ˆ๋‹ค. ์•„์ง ์‹ค์ œ๋กœ ์‚ฌ์šฉ ๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ์•„์ง 2.7์„ ์‹คํ–‰ ์ค‘์ด๋ฉฐ ๊ณง ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๊ณ„ํš์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ๊ทผ์—๋„ Perl 6์— ๋Œ€ํ•ด ๋งŽ์ด ๋“ฃ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ...

ํŒŒ์ด์ฌ์—์„œ ๋ฐฐ์šธ ์ˆ˜์žˆ๋Š” ๊ตํ›ˆ์€ ์—”์ง„์˜ ๋ฒ„์ „ ๋ณ€๊ฒฝ์—์„œ ์–ธ์–ด์˜ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ€์„ค ์ ์œผ๋กœ PS 7 ์—”์ง„์€ ์ค‘๋‹จ์—†๋Š” ๋ณ€๊ฒฝ ๋ชจ๋“œ์—์„œ ์ด์ „ ์Šคํฌ๋ฆฝํŠธ (.PS1) ํŒŒ์ผ์„ ๊ณ„์† ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋ฐ˜๋ฉด, ์Šคํฌ๋ฆฝํŠธ๊ฐ€ 7 ์ธ์‹ (์˜ˆ : .PS7 ํ™•์žฅ์ž)์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉด ์—…๋ฐ์ดํŠธ๋˜์—ˆ๋‹ค๊ณ  ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ PS 7์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ €๋Š” ํŒŒ์ด์ฌ 3๋ฅผ ๊ณตํฌ ์‡ผ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ์ง€๋‚˜์น˜๊ฒŒ ๊ทน์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PyPi ์—์„œ ์˜ค๋ฉด v3๊ฐ€ ์ด์ œ ๊ฑฐ์˜ ๋ชจ๋“  ์ƒ์œ„ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด 33 %์˜ ์นจํˆฌ์œจ์„ ๊นจ๊ณ  Ken Reitz์˜ ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ฐ™์€ ์ตœ์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ ๊ฑฐ์˜ 50/50 ๋ถ„ํ•  : ์–ด์ œ v3์˜ 685k ๋‹ค์šด๋กœ๋“œ, v2์˜ 875k ๋‹ค์šด๋กœ๋“œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Python 3๋ฅผ ์˜ค๋žซ๋™์•ˆ ๋ฐฉํ•ดํ•˜๋Š” ์ฃผ์š” ์š”์ธ์€ pandas์™€ pysci์— ๋Œ€ํ•œ ๊ณผํ•™ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ง€์›์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์‹  ํ†ต๊ณ„์—์„œ ๊ณผํ•™ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ด์ œ Python 3์„ Python 2๋ณด๋‹ค ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. https://pypistats.org/packages/pandas 231k v3 ๋‹ค์šด๋กœ๋“œ, 175k v2 ๋‹ค์šด๋กœ๋“œ.

์œ ๋ช…ํ•œ W. Edwards Deming ๋ฐ•์‚ฌ๋Š” "ํ•˜๋‚˜๋‹˜์„ ์‹ ๋ขฐํ•˜๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ ์˜ค์‹ญ์‹œ์˜ค!"๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. PyPi ๋ฐ์ดํ„ฐ ์„ธํŠธ๋ฅผ ๋ถ„์„ํ•˜๊ณ  Python 3๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์ฃผ๋Š” PowerShell ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://packaging.python.org/guides/analyzing-pypi-package-downloads/

๋‚˜๋Š” (์ •ํ™•ํ•œ ์ˆœ์„œ๋กœ) ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์ข‹์€ ์Šคํƒ ์ถ”์ ์„ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, psm1 ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€๋กœ๋“œ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ž„์˜์˜ ๊ทœ์น™์„ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋กœ ์ธํ•ด ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ psm1 ํŒŒ์ผ์— ๋…ผ๋ฆฌ์ ์œผ๋กœ globbed๋˜๋Š” ๋น„๋ฐ€ ์Šคํƒ ์ถ”์ ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์Šคํƒ ํŠธ๋ ˆ์ด์Šค์˜ ์ค„ ๋ฒˆํ˜ธ๊ฐ€ ์ดˆ์ฝœ๋ฆฟ ์ฃผ์ „์ž๋งŒํผ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
  2. ์Šคํƒ ๊ธฐ๋ฐ˜ ํฐ ๋…ธ์ด๋งŒ ์•„ํ‚คํ…์ฒ˜์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์œ ์šฉ์„ฑ์„ 99 % ์‚ผํ‚ค๋Š” PowerShell ๊ธฐ๋ณธ ์˜ค๋ฅ˜ ๊ฐœ์ฒด ๋ฌธ์ž์—ด ํ˜•์‹์„ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

    • C #์€ ์–ด๋Š ์ •๋„์ด ๊ถŒ๋ฆฌ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. PowerShell์€ ๋„ˆ๋ฌด ์˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  3. ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ null ์žฅ์น˜๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์„ฑ๋Šฅ๋ฉด์—์„œ ๋™์ผํ•˜๋„๋ก null ๋ฆฌ๋””๋ ‰์…˜์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

  4. ๋™์  ๋ฒ”์œ„ ์ง€์ • ์ˆ˜์ • :

function a($f) {& $f}
function main() {
    $f = {write-host 'success'}
    a {& $f} # stack-overflow
    a {& $f}.getnewclosure() # okay
}
[void] (main)
  1. ๋ณ€์ˆ˜ ์บก์ฒ˜ ์ˆ˜์ • :
set-strictmode -version 'latest'
$erroractionpreference = 'stop'

function main() {
    $a = 'foo'
    $f = {
        $g = {$a}.getnewclosure()
        & $g # "variable '$a' cannot be retrieved because it has not been set."
    }.getnewclosure()
    & $f
}

main
  1. ์ถœ๋ ฅ์ด ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค. return ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ ์ณ์ฃผ์„ธ์š”.

  2. PowerShell์—๋Š” ๊ฐœ์ฒด์˜ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ์ฒ˜๋ฆฌ๋ฅผ์œ„ํ•œ ๊ตฌ๋ฌธ ์„คํƒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

  3. PowerShellGet์„ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์€ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ ์ค„์˜ ์ฝ”๋“œ, ์‚ผ์ผœ ์ง„ ์˜ˆ์™ธ, ํ…Œ์ŠคํŠธ ์ปค๋ฒ„๋ฆฌ์ง€๊ฐ€์—†๋Š” ํ•จ์ˆ˜.

  4. ๋ชจ๋“ˆ ์บ์‹ฑ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค.

    • ์บ์‹œ๋Š” ์Šค๋ ˆ๋“œ๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. WTF?
    • ๋ถ„์„ ๋ชฉ์ ์œผ๋กœ ๋ชจ๋“ˆ์„ ์บ์‹ฑํ•˜๋Š” ์ „์ฒด ๊ฐœ๋…์€ kludge / hack์ž…๋‹ˆ๋‹ค. PowerShell์ด โ€‹โ€‹๋„ˆ๋ฌด ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— Microsoft ๋‚ด์—์„œ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํฐ ์ง€์›์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ง„์ •ํ•œ ์ˆ˜์ •์— ๋Œ€ํ•œ ๋‹ค์Œ ์ œ์•ˆ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.
    • AnalysisCache ๋ฅผ
    • ๋ถ„์„์„์œ„ํ•œ ๋ชจ๋“ˆ ์บ์‹ฑ์€ ๋ถ„์„์„ ๋ชจ๋“ˆ์˜ ๋Ÿฐํƒ€์ž„ ์ƒํƒœ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
  5. ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด Py ํŒŒ์ผ์ด pyc ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•œ "์ปดํŒŒ์ผ ๋œ ๋ชจ๋“ˆ"์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  6. $none ๋ฆฌํ„ฐ๋Ÿด ์ถ”๊ฐ€

    • ์—ฌ๋Ÿฌ ๊ณณ์—์„œ $null ๋ฅผ $none ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
    • ParameterSetName์˜ ์ž‘๋™ ๋ฐฉ์‹์„ ์žฌ๊ณ ํ•˜๊ณ  $none ํŠน์ˆ˜ ๊ฐ’์„ ๋งค๊ฐœ ๋ณ€์ˆ˜์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ 5 ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋ฏธ์นœ switch ๋ฌธ์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋„๋กํ•ฉ๋‹ˆ๋‹ค. COM ๋ฐ C # dynamic์€์ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. PowerShell์€์ด๋ฅผ ์žฌ์•™์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ตฌ๋… ๋ฐœ์ƒ ์œ ํ˜•์— ๋”ฐ๋ผ ReportingServicesTools ๋ชจ๋“ˆ์—์„œ SSRS ๋ณด๊ณ ์„œ์— ๋Œ€ํ•œ ๋ฐฐํฌ ๊ตฌ์„ฑ์„ ๋™์ ์œผ๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์™ธ๋ถ€ ์ ์œผ๋กœ ๋ณต์žก์„ฑ์„ ๊ฐ•์š”ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์†์„ฑ ๊ฐ€๋ฐฉ์„ ์ „๋‹ฌํ•˜๊ณ  ๊ทธ ๋ฐฉ๋ฒ•์ด ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณต์žก์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ParameterSetName์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์ข‹์ง€ ์•Š์€ ํ…œํ”Œ๋ฆฟ์œผ๋กœ์„œ์˜ ๊ฐœ๋…์œผ๋กœ ๋งŒ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ intellisense์™€ ad-hoc polymorphism์„ ํ˜ผ๋™ํ•ฉ๋‹ˆ๋‹ค.

@jzabroski ErrorRecord์ด ์„œ์‹์— ๋Œ€ํ•ด์„œ๋Š”, ๊ทธ ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€์žˆ๋‹ค : https://github.com/PowerShell/PowerShell/issues/3647๋ฅผ ํฌ๋งทํ•˜๋ฉด ์ฃผ์š” ๋ณ€๊ฒฝ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๋Š” ๊ฐœ์„ ์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์š”์ฒญ ์ค‘ ์ผ๋ถ€๋Š” ์ž ์žฌ์ ์œผ๋กœ ์ถ”๊ฐ€์ ์ด๋ฉฐ ์ค‘๋‹จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ„๋„์˜ ๋ฌธ์ œ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠน์ • ๋ฌธ์ œ๋Š” ๊ธฐํšŒ๊ฐ€ ์žˆ๊ณ  PS์˜ ์ƒˆ๋กœ์šด ์ฃผ์š” ๋ฒ„์ „์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ •๋‹นํ™” ํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋…ผ์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@jzabroski ErrorRecord ํ˜•์‹ํ™”์™€ ๊ด€๋ จํ•˜์—ฌ ๋…ผ์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. # 3647 ํ˜•์‹ํ™”๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

_Why_ ์ด๊ฒƒ์ด ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€๊ฐ€ ์•„๋‹Œ๊ฐ€? ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜์Œ์— ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์˜ ๋ฌธ์ž์—ด์— ๋Œ€ํ•ด ํŒจํ„ด ์ผ์น˜๋ฅผํ•ด์„œ๋Š” ์•ˆ ๋˜๋‚˜์š”? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ํ•˜์œ„ ์†Œ๋น„์ž๋ฅผ ๊นฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์š”์ฒญ ์ค‘ ์ผ๋ถ€๋Š” ์ž ์žฌ์ ์œผ๋กœ ์ถ”๊ฐ€์ ์ด๋ฉฐ ์ค‘๋‹จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ„๋„์˜ ๋ฌธ์ œ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ๊ฒƒ์ด ์ž ์žฌ์ ์œผ๋กœ ๊ฐ€์‚ฐ ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ์ด ํ† ๋ก ์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š๋„๋ก ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ค๋Š˜ ์•„์นจ์ด ๋ชฉ๋ก์„ ์‹ ์ค‘ํ•˜๊ฒŒ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฒœ๋‘ฅ์„ ์šธ๋ฆฌ๊ณ  ๋ฒˆ๊ฐœ๋ฅผ ํ„ฐ๋œจ๋ฆฌ๋Š” ๋ถ„๋…ธ์™€ ์—ด์ •์„ ๊ฐ€์ง„ PowerShell์„ ์‹ซ์–ด ํ•ฉ๋‹ˆ๋‹ค. PowerShell์€ ์ •์œก์  ์นผ์ด ๋‹ฌ๋ฆฐ ๋ณผ๋ง ๊ณต์ž…๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋กœ์„œ ๊ฐ€์žฅ ๋‹นํ™ฉํ–ˆ๋˜ 5 ๊ฐ€์ง€ ์ˆœ๊ฐ„์€ ๋ชจ๋‘ PowerShell์„ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์‹œ๊ฐ„์„ ๊ฒฐ์ฝ” ๋˜์ฐพ์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.

๋‚˜๋Š” ์™œ ์ด๊ฒƒ์ด ๊นจ์ง€๋Š” (๊ทธ๋ฆฌ๊ณ  ๋ฉ‹์ง„) ๋ณ€๊ฒฝ ์ œ์•ˆ์ธ์ง€ ๋ช…ํ™•ํžˆํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด ์ œ์•ˆ์„ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ์ด ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค. return์€ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฐ™์€ ์ผ์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ ์ณ์ฃผ์„ธ์š”.

return ๋Š” class ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ / ๊ณ ๊ธ‰ PS ๊ธฐ๋Šฅ์—์„œ "์ถœ๋ ฅ์ด ์ถ•์ "๋˜๋Š” ๋ฐฉ์‹์€ Korn ์‰˜ ๋ฐ Bash์™€ ๊ฐ™์€ ์‰˜ ์Šคํฌ๋ฆฝํŒ… ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ฝ˜์†”์—์„œ ์—ฌ๋Ÿฌ ๋ช…๋ น์„ ๋ณต์‚ฌํ•˜์—ฌ ํ•จ์ˆ˜์— ๋„ฃ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ฝ˜์†”์—์„œ ํ•ด๋‹น ๋ช…๋ น์„ ์‹คํ–‰ํ•  ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ ๋ช…๋ น์—์„œ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

PowerShell์— ๋Œ€ํ•œ ๋‚˜์˜ ์ฃผ์š” ๋ถˆ๋งŒ์€ ์ผ๋ฐ˜ / ๊ณ ๊ธ‰ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ return ๊ฐ€ ์ธ์ˆ˜๋ฅผ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š์•„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

return $foo

์‹ค์ œ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

$foo
return

์ด๊ฒƒ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ return์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ์„ ์ œ์–ด ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋Š๋‚Œ์„์ค๋‹ˆ๋‹ค.

return ๋Š” class ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ / ๊ณ ๊ธ‰ PS ๊ธฐ๋Šฅ์—์„œ "์ถœ๋ ฅ์ด ์ถ•์ "๋˜๋Š” ๋ฐฉ์‹์€ Korn ์‰˜ ๋ฐ Bash์™€ ๊ฐ™์€ ์‰˜ ์Šคํฌ๋ฆฝํŒ… ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด @BrucePay๋ฅผ ํฌํ•จํ•˜์—ฌ ์Šต๋‹ˆ๋‹ค (์•„๋ž˜ ๊ฐ•์กฐ , ๊ทธ๋ฅผ ์ธ์šฉ), ๊ฒฐ๋ก ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

PowerShell์—์„œ๋งŒ์ด ๋น„๋…ผ๋ฆฌ์  "๋ฐ˜ํ™˜์ด ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Œ"๋„Œ์„ผ์Šค๊ฐ€ ์žˆ๊ณ  ์ถœ๋ ฅ์ด ๋ˆ„์ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜๊ด‘์Šค๋Ÿฌ์šด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์ด๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ PowerShell In Action์˜ ๋ชจ๋“  ๊ณณ์—์„œ "problems"๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด vZeroTechnicalDebt ๋ชฉ๋ก์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ Bruce๊ฐ€ return ๋ฌธ์— ๋Œ€ํ•ด ์“ด ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

7.3 ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ ๊ฐ’
์ด์ œ ํ•จ์ˆ˜์—์„œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š”์ด ์ž‘์—…์„ ๊ณ„์† ํ•ด์™”์ง€๋งŒ ๊ฐ•์กฐํ•ด์•ผ ํ•  ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. PowerShell์€ ์…ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๊ณ  ์ถœ๋ ฅ์„ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฐœ์ฒด๋ฅผ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ํ‘œํ˜„์‹ ๋˜๋Š” ํŒŒ์ดํ”„ ๋ผ์ธ์˜ ๊ฒฐ๊ณผ๋Š” ๊ฒฐ๊ณผ ๊ฐœ์ฒด๋ฅผ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช…๋ น ์ค„์—์„œ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„ ๋œ ์„ธ ๊ฐœ์˜ ์‹์„ ์ž…๋ ฅํ•˜๋ฉด ์„ธ ๋ช…๋ น๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ชจ๋‘ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
[...]
๊ธฐ์กด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” ์ƒ์„ฑ๋˜๋Š” ๋ฐฐ์—ด์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ฒฐ๊ณผ ๋ณ€์ˆ˜ $result ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๊ฐ ์š”์†Œ๋ฅผ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ ํ•œ ๋‹ค์Œ ๋ฐฐ์—ด์„ ๋‚ด ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค.

PS (16) > function tradnum
> {
> $result = @()
> $i=1
> while ($i -le 10)
> {
> $result += $i
> $i++
> }
> $result
> }

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

์ด ๊ธฐ๋Šฅ์˜ ๋™๊ธฐ๋Š” ์ข‹์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋™์ผํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ์œ„ํ•œ ํ›จ์”ฌ ๊น”๋”ํ•˜๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๊ฐœ์ฒด์—์„œ ๊ฐœ์ฒด ์ปฌ๋ ‰์…˜์œผ๋กœ์˜ ์•”์‹œ ์  ์Šน๊ฒฉ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ PowerShell์—๋Š” ์ด๋ฏธ ๋ฆฌ๋””๋ ‰์…˜์— ๋Œ€ํ•œ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค : Write-Output .

Bash์—์„œ return์€ ํ•จ์ˆ˜, ๋งˆ์นจํ‘œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์–ด? Bash๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถœ๋ ฅ์„ ๋ˆ„์ ํ•ฉ๋‹ˆ๋‹ค.

hillr@Keith-Dell8500:~$ function foo() {
> echo "Hello"
> ls ~
> date
> return
> echo "World"
> }
hillr@Keith-Dell8500:~$ foo
Hello
bar.ps1  date.txt   test.ps1
baz.ps1  dotnet    powershell-preview_6.2.0-rc.1-1.ubuntu.16.04_amd64.deb
Tue Mar 26 16:06:18 DST 2019

PowerShell๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Bash๋Š” return ๋ฌธ๊นŒ์ง€ ๊ฐ ๋ช…๋ น์˜ ๋ชจ๋“  ๊ฒƒ์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์•„, $? ์—์„œ ๋ฐ˜ํ™˜ ๋œ ๋‚ด์šฉ์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋„ค, ์ฐจ์ด์ž…๋‹ˆ๋‹ค. ์„ฑ๊ณต / ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€ ๋‚ด๊ธฐ ์œ„ํ•ด Bash์—์„œ int ๋ฐ˜ํ™˜ ๊ฐ’์ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. PS์—์„œ $? ๋Š” ํ•จ์ˆ˜์—์„œ ์ƒ์„ฑ ๋œ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ฑ๊ณต / ์‹คํŒจ๋ฅผ bool๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ $? ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  try/catch/finally ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ. return ์€ (๋Š”) ํ•ด๋‹น ์–ธ์–ด์—์„œ ํ•˜๋‚˜์˜ ๋ชฉ์  ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. PowerShell์—์„œ๋Š” ์ถœ๋ ฅ๊ณผ ํ˜ผํ•ฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜ํ™˜ ๊ฐ’๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ฐ™์€ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ ๊ณต๋™ ๋ฃจํ‹ด ๋˜๋Š” "์ˆ˜์ต๋ฅ  ๋ฐ˜ํ™˜"๋˜๋Š” ์ƒ์„ฑ๊ธฐ, ์ƒ์„ฑ๊ธฐ ์ƒ์„ฑ์ž ๋ฐ ์Šค์บ๋„ˆ (์•„์ด์ฝ˜์—์„œ์™€ ๊ฐ™์ด)์ž…๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ์ž…๋ ฅ ์†Œ๋น„๊ฐ€ ๊ฒŒ์œผ๋ฅด๊ณ  ์‹คํŒจ๋กœ ์ธํ•ด ์ง€๊ธˆ๊นŒ์ง€ ์ƒ์„ฑ ๋œ ๊ณ„์‚ฐ ๋ถ€๋ถ„์ด ์ฒ˜๋ฆฌ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋ฉด์„œ ๊ณ„์‚ฐ์ด ์ผ์‹œ ์ค‘๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

"์ถœ๋ ฅ ๋ฆฌ๋””๋ ‰์…˜"์€ ์‹ค์ œ๋กœ ๋‘ ๊ฐœ์˜ ๊ฐœ์ฒด, ์ฆ‰ Processor์™€ ProcessorContext๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ๋‚˜๋Š” ๋‹น์‹ ์ด ๋‚ด ์›๋ž˜์˜ ์š”์ ์„ ๋ฐ˜๋ฐ• ํ•œ ์ด์œ ๋ฅผ ๋ด…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‚ด๊ฐ€ ์‚ฐ์ถœ๋ฌผ์„ ์‚ฐ์ถœ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ๋‚˜์˜๋‹ค๊ณ  ๋งํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  PowerShell์ด โ€‹โ€‹์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ถœ๋ ฅ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  try/catch/finally ๋ฅผ ํ†ตํ•ด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ๋งŽ์€ ํƒ€์ดํ•‘์ด๋ฉฐ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์˜๋„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์Œ, PowerShell์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋˜๋Š” .NET์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ "๋ˆ„์ˆ˜"๋ฅผ ๊ฒช์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ ํ•ด์„œ ๊ธฐ์–ต๋ ฅ์„ ์Œ“์„ ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ์ผ์ข…์˜ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋ฐฐ์น˜ ๋œ ํฐ ์ถœ๋ ฅ / ์ปฌ๋ ‰์…˜์„ ์ฒ˜๋ฆฌ ํ•  ๋•Œ ์•ฝ๊ฐ„์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

PowerShell์˜ return ๋ฌธ์€ ๋‹จ ํ•˜๋‚˜์˜ ๋ชฉ์  ๋งŒ ๊ฐ€์ ธ์•ผํ•˜๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ์€ ์•„๋ฌด๊ฒƒ๋„์—†์ด ์ผ์ฐ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ return 42 ํ•˜๋ฉด $? ์™€๋Š” ์•„๋ฌด๋Ÿฐ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํ•ญ๋ชฉ ์ถœ๋ ฅ (์–‘๋ณด)์ž…๋‹ˆ๋‹ค.

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด $? ๋Š” PowerShell์—์„œ ๊ด€๋ฆฌํ•˜๋ฉฐ ํ•จ์ˆ˜๊ฐ€ ์ถœ๋ ฅ / ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. $? ๋Š” ์ƒ์„ฑ ๋œ ์˜ค๋ฅ˜ (๋˜๋Š” ๊ทธ ๋ถ€์กฑ)์— ๋”ฐ๋ผ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, $res = foo -$ res๋ฅผ ์‹คํ–‰ํ•˜๋ฉด foo ํ•จ์ˆ˜๊ฐ€ ์ถœ๋ ฅํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ "์‹คํŒจ"ํ–ˆ๋Š”์ง€ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด ์‹คํ–‰ํ•˜๋Š” ๋ชจ๋“  ๋ช…๋ น์— ๋Œ€ํ•ด $? ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ try/catch ๋ธ”๋ก์— ์—ฌ๋Ÿฌ ๋ช…๋ น์„ ๋ž˜ํ•‘ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด์ „์˜ ํƒ€์ดํ•‘์ด ํ›จ์”ฌ ์ ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค (์Šคํฌ๋ฆฝํŠธ์—์„œ).

@BrucePay๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ๋งํ•˜๋Š” ๊ฒƒ์„
Korn Shell์—์„œ return์€ ํ•จ์ˆ˜, ๋งˆ์นจํ‘œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
Bash์—์„œ return์€ ํ•จ์ˆ˜, ๋งˆ์นจํ‘œ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

PowerShell์—์„œ return์€ ํ•จ์ˆ˜๋„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

PS C:\> function test { "hello"; return "!"; "world"}
PS C:\> test
hello
!

๋ฐ˜ํ™˜ ๊ฐ’๊ณผ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ˜ผํ•ฉํ•˜๋Š” ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์™€ ๊ฐ™์€ ์„ฑ๋Šฅ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ PowerShell์˜ ๋ฐ˜ํ™˜ ๊ฐ’๊ฐ„์— ์ฐจ์ด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผํ•ฉ์ด ์—†์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ๋ฌธ์ž์—ด์„ stdout์— ์“ฐ๊ณ  ๋ณ„๋„๋กœ ๋Š๋‚Œํ‘œ๋ฅผ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋งํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. write-output ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ๋„ ๊ฐ™์€ ์‹ค์ˆ˜ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ : write-output 'x' , 'x' , return 'x' ๊ฐ™์€ ์ถœ๋ ฅ ๊ฒฝ๋กœ์—์„œ ํŒŒ์ดํ”„ ๋ผ์ธ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ์—†์Šต๋‹ˆ๋‹ค.

์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ ๊ณต๋™ ๋ฃจํ‹ด ๋˜๋Š” "์ˆ˜์ต๋ฅ  ๋ฐ˜ํ™˜"๋˜๋Š” ์ƒ์„ฑ๊ธฐ, ์ƒ์„ฑ๊ธฐ ์ƒ์„ฑ์ž ๋ฐ ์Šค์บ๋„ˆ (์•„์ด์ฝ˜์—์„œ์™€ ๊ฐ™์ด)์ž…๋‹ˆ๋‹ค. ํ‹ฐ

์ฆ‰, ๋ช…๋ น ์ค„์— ๋ช…๋ น์„ ์ž‘์„ฑํ•œ ๋‹ค์Œ ์Šคํฌ๋ฆฝํŠธ ๋‚˜ ํ•จ์ˆ˜์— ๋„ฃ์œผ๋ฉด ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

PS C:\> robocopy /whatever
PS C:\> "robocopy /whatever" | set-content test.ps1; .\test.ps1
PS C:\> function test { robocopy /whatever }

๋‚˜๋Š” ์•„๋ฌด ์ด์œ ์—†์ด yield return ๋ฅผํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฒฝ์šฐ์— ์ถœ๋ ฅ์„ ์‚ผํ‚ค์ง€ ์•Š๋Š” ์„ธ ๊ฐ€์ง€ ๊ฒฝ์šฐ ๋ชจ๋‘์—์„œ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ๋ณด๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. PowerShell์ด โ€‹โ€‹์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์€ ์…ธ ๋ฐ ์…ธ / ๋ฐฐ์น˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์— ์ผ๊ด€๋˜๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ น ์ค„์— ์ž‘์„ฑํ•œ ๋‚ด์šฉ์„ ๊ฐ€์ ธ ์™€์„œ ๊ณ„์† ํ˜ธ์ถœ ํ•  ์ˆ˜์žˆ๋Š” ๊ณณ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•œ๋‹ค๊ณ ํ•ด์„œ ์ฝ”๋“œ ๋™์ž‘ ๋ฐฉ์‹์ด ์™„์ „ํžˆ ๋ฐ”๋€Œ์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” ์ž…๋ ฅ ์†Œ๋น„๊ฐ€ ๊ฒŒ์œผ๋ฅด๊ณ  ์‹คํŒจ๋กœ ์ธํ•ด ์ง€๊ธˆ๊นŒ์ง€ ์ƒ์„ฑ ๋œ ๊ณ„์‚ฐ ๋ถ€๋ถ„์ด ์ฒ˜๋ฆฌ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜๋ฉด์„œ ๊ณ„์‚ฐ์ด ์ผ์‹œ ์ค‘๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

PowerShell ํŒŒ์ดํ”„ ๋ผ์ธ์€ ๋Ÿฐํƒ€์ž„์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. ๋ง์”€ํ•˜์‹  ๋‚ด์šฉ์„ ์ดํ•ดํ•œ๋‹ค๋ฉด ์ด๋ฏธ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

PS D:\> 1..1mb |foreach { write-verbose -Verbose "incoming number: $_"; $_ } |select -first 3
VERBOSE: incoming number: 1
1
VERBOSE: incoming number: 2
2
VERBOSE: incoming number: 3
3

select ๋Š” ์„ธ ๊ฐ€์ง€๊ฐ€์žˆ๋Š” ์ฆ‰์‹œ ํŒŒ์ดํ”„ ๋ผ์ธ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋ฐฑ๋งŒ ๊ฐœ์˜ ์ˆซ์ž๋Š” foreach ์ž…๋ ฅ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํŒŒ์ดํ”„ ๋ผ์ธ ์•„๋ž˜๋กœ ์ด๋™ํ•˜๋Š” ์ •๋ณด๋Š” "ํ‘ธ์‹œ"๋ชจ๋ธ์ด์ง€๋งŒ PowerShell ์—”์ง„์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค.

์…ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ์ด ๊ธฐ๋ณธ ๋ช…๋ น์ด๋‚˜ PS cmdlet ์™ธ๋ถ€์˜ ํ•ญ๋ชฉ์—์„œ ์˜ค๋Š” ๊ฒฝ์šฐ "๊ณ„์‚ฐ์„ ์ผ์‹œ ์ค‘๋‹จํ•˜๊ธฐ์œ„ํ•œ ์ž…๋ ฅ ์‹คํŒจ"์˜ ์˜๋ฏธ๋Š” ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด Py ํŒŒ์ผ์ด pyc ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•œ "์ปดํŒŒ์ผ ๋œ ๋ชจ๋“ˆ"์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ํ–ฅ์ƒ์„์œ„ํ•œ ์˜๋„ ๋œ ์†”๋ฃจ์…˜์€ C #์œผ๋กœ ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. PowerShell ์ฝ”๋“œ๋Š” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ JIT๋ฅผ ์ปดํŒŒ์ผํ•˜์ง€๋งŒ PS ํŒ€ ๊ตฌ์„ฑ์›์€์ด๋ฅผ ์‚ฌ์šฉ์ž ์ง€์ •์„ ์œ„ํ•ด ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต๊ฐœ ํ•  ๊ณ„ํš์ด ์—†๋‹ค๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด IIRC Dongbo Wang์˜ PS Conf Asia๊ฐ€ 2018 ๋…„ 11 ์›”

์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์„ null ์žฅ์น˜๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์„ฑ๋Šฅ๋ฉด์—์„œ ๋™์ผํ•˜๋„๋ก null ๋ฆฌ๋””๋ ‰์…˜์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฐ”๋žŒ์งํ•˜์ง€๋งŒ ๊ทธ๋Ÿด ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค. $null = 4 ๋Š” ๊ฐ„๋‹จํ•œ ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ์ด๊ณ , 4 | out-null ๋Š” ํŒŒ์ดํ”„ ๋ผ์ธ์„ ์‹œ์ž‘ํ•˜๊ณ  ๋ช…๋ น ํ•ด๊ฒฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์˜๋„์ ์œผ๋กœ out-null ๋กœ๊น…์„ ์ถ”๊ฐ€ ํ•œ ํ”„๋ก์‹œ ๋ž˜ํผ๋กœ ๋งŒ๋“  ๊ฒฝ์šฐ ์•”ํ˜ธ? ํŒŒ์ดํ”„ ๋ผ์ธ ๋ฐ cmdlet ์‹คํ–‰์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ์‹๋ณด๋‹ค ๋Š๋ฆฐ ๊ธฐ์ˆ  ๋ถ€์ฑ„์ž…๋‹ˆ๊นŒ?

๋™์  ๋ฒ”์œ„ ์ˆ˜์ • :

"๋™์  ๋ฒ”์œ„ ์ง€์ • ์‚ฌ์šฉ ์•ˆ ํ•จ"์„ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ ์˜๋„์  ์ธ ์„ ํƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Bruce Payette์—์„œ "๋™์  ๋ฒ”์œ„ ์ง€์ •, ์ด๊ฒƒ์€ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” 30 ๋…„ ์ „์ฒ˜๋Ÿผ LISP์— ๋™์  ๋ฒ”์œ„ ์ง€์ •์ด ์žˆ์—ˆ์ง€๋งŒ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์‰˜์ด ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์‰˜์€ ๋™์  ๋ฒ”์œ„ ์ง€์ • (Bash๊นŒ์ง€)๊ณผ ๋™๋“ฑํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  Unix ์‰˜์€ ๋™์  ๋ฒ”์œ„ ์ง€์ •๊ณผ ๋™๋“ฑํ•œ ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ˜ธ์ถœ์ž์˜ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜๋Š” ํ˜ธ์ถœ์ž ์ปจํ…์ŠคํŠธ์˜ ๋ณ€์ˆ˜๊ฐ€ ์ž์‹ ์ปจํ…์ŠคํŠธ์— ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค. [..] ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์  ๋ฒ”์œ„ ์ง€์ •์—์„œ ํ•œ ๋ฒˆ์˜ ์ˆ˜์ •์œผ๋กœ ํ˜ธ์ถœ ์ฒด์ธ์„ ์กฐํšŒํ•˜๊ณ  ์กด์žฌํ•˜๋Š” ์œ„์น˜์— ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š๊ณ  ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ํ˜„์žฌ ๋ฒ”์œ„์—์„œ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ ์‰˜์˜ ๋™์ž‘์„ ์—๋ฎฌ๋ ˆ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. "

๊ทธ๊ฒƒ์€ ์„ฑ ๊ฐ€์‹ค ์ˆ˜ ์žˆ์ง€๋งŒ, ์‰˜์— ๋Œ€ํ•œ "๊ธฐ์ˆ  ๋ถ€์ฑ„"์ด๋ฉฐ ๋ณ€๊ฒฝ๋˜๋ฉด "zeroTechnicalDebt"๊ฐ€ ๋ ๊นŒ์š”?

์Œ, PowerShell์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๋˜๋Š” .NET์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ "๋ˆ„์ˆ˜"๋ฅผ ๊ฒช์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ ํ•ด์„œ ๊ธฐ์–ต๋ ฅ์„ ์Œ“์„ ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณ€์ˆ˜์— ํ• ๋‹น๋˜๊ฑฐ๋‚˜ ์ผ์ข…์˜ ํ•ด์‹œ ํ…Œ์ด๋ธ”์— ๋ฐฐ์น˜ ๋œ ํฐ ์ถœ๋ ฅ / ์ปฌ๋ ‰์…˜์„ ์ฒ˜๋ฆฌ ํ•  ๋•Œ ์•ฝ๊ฐ„์ฃผ์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์—”์ง€๋‹ˆ์–ด๊ฐ€ ์•„๋‹Œ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๊ฐ€ 8TB ํŒŒ์ผ ๊ณต์œ ์˜ ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ๋กœ ๋งŒ๋“œ๋Š” ๋…ผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์ž˜ ๋๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค : ๊ทธ๊ฒƒ์€ ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ๋ชจํ–ˆ๊ณ  ๋˜ํ•œ ์‹œ์Šคํ…œ์„ 100 % cpu๋กœ ๊ณ ์ • ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค ... ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์‹œ์ž‘๋œ ํ›„ ์šฐ๋ฆฌ๋Š” ์‹ฌ์ง€์–ด ์ƒ์ž์— ๋กœ๊ทธ์ธ์กฐ์ฐจ ํ•  ์ˆ˜ ์—†์—ˆ๊ณ , ์„œ๋ฒ„๋ฅผ ์ €์žฅํ•˜๋Š” ์œ ์ผํ•œ ํ•ด๊ฒฐ์ฑ…์€ _ ์ƒ์‚ฐ ์ค‘ _์ž…๋‹ˆ๋‹ค. ํ•˜๋“œ ์žฌ๋ถ€ํŒ…ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

@jzabroski ์Šคํฌ๋ฆฝํŠธ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Powershell ์‚ฌ๋žŒ๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์˜๋„์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ์„ธํŠธ ( $files = get-childitem; $files | foreach-object )๋ฅผ ๋ฏธ๋ฆฌ๋กœ๋“œํ•˜๋Š” ๋Œ€์‹  ํŒŒ์ดํ”„ ๋ผ์ธ ์ŠคํŠธ๋ฆฌ๋ฐ ( get-childitem | foreach-object {} )์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์„ ๋ถˆ ๋กœ๋”ฉ์„ ํ–ˆ๋‚˜์š”?

์œ ์‚ฌํ•œ ํŒŒ์ผ์„ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด Group-Object ๋ฅผ ์‚ฌ์šฉ ํ–ˆ์Šต๋‹ˆ๊นŒ? ์ตœ๊ทผ์— ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์ด ์•„๋‹Œ ๊ฒฝ์šฐ CPU ์‚ฌ์šฉ์„ ์ค„์ด๋Š” ๊ทธ๋ฃน ๊ฐœ์ฒด ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .

PowerShell์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ์ฝ”์–ด์ด๋ฉฐ ์ž‘์—… / ์‹คํ–‰ ๊ณต๊ฐ„ ์ฝ”๋“œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ? ๋‹จ์ผ ์ฝ”์–ด ์„œ๋ฒ„์˜€์Šต๋‹ˆ๊นŒ? PS 6.1์—๋Š” CPU ์‚ฌ์šฉ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ๋„์›€์ด๋˜๋Š” ์˜ค๋ฒ„ ํ—ค๋“œ์™€ ์Šค๋กœํ‹€ ๋ง์ด ํ›จ์”ฌ ์ ์€ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ—ˆ์šฉํ•˜๋Š” Start-ThreadJob ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฒฝํ—˜์ƒ PowerShell์„ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$files = @(); $files += $f ๋ฅผ ์“ฐ๋ผ๊ณ ํ•˜๋Š” ๋ชจ๋“  ํŠœํ† ๋ฆฌ์–ผ๊ณผ ์ฑ…์€ CPU์ฃผ๊ธฐ์™€ ๋ฉ”๋ชจ๋ฆฌ์—์žˆ์–ด ์„ธ์ƒ์— ์•ฝ๊ฐ„์˜ ๋น„์šฉ์ด ๋“ค์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋Š๋ฆฌ๊ณ  ํ”„๋กœ์„ธ์„œ์™€ ๋ฉ”๋ชจ๋ฆฌ ๋น„์šฉ์ด ๋งŽ์ด ๋“ค๊ณ  ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ๊ทธ ํŒจํ„ด์ด ๋Œ€๋ณธ์— ์ „ํ˜€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š๊ณ  ๊ทธ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด, ๋˜๋Š” ๋ฏธ๋ž˜์˜ ์ฃผ์š” ๋ณ€๊ฒฝ์—์„œ ๋ฐฐ์—ด์—์„œ + =๋ฅผ ๋ฌดํšจํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?).

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—๋Š” ์ ˆ์ถฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Get-ChildItem -Recurse ๋Š” 22 ์ž์ด๊ณ  ๋‚ด C : ๋“œ๋ผ์ด๋ธŒ์—์„œ๋งŒ 800MB ์ด์ƒ์˜ RAM์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” C # ์€ 50 ์ค„ ์ด์ƒ์ด๋ฉฐ ํŒŒ์ผ ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ „ํ˜€ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. 80MB์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ PS ๋ˆ„์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž ํŽธ์˜๋ฅผ ์œ„ํ•ด PS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์— ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€์—†๊ณ , ์œ ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , ๋‚˜์œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜์—†๊ณ , ์ˆ™๋ จ ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋‹ˆ์–ด๋„๋˜๋Š” ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? (๊ทธ๋ฆฌ๊ณ  ์–ด๋Š ๊ฒƒ๋„ ๊ป๋ฐ๊ธฐ์ž…๋‹ˆ๊นŒ?)

์ด์ „์— ์ œ์•ˆํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๊นŒ?

Bash ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ํŒŒ์ผ์„ ๋‚˜์—ดํ•˜๊ณ  ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ฌด๋„ˆ์ง€๊ณ  SSH๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜๋„ ์—†์Šต๋‹ˆ๋‹ค. os.walk() ํŒŒ์ผ ํŠธ๋ฆฌ๋ฅผ os.stat() ํ•˜๊ณ  ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•ด

๋‚˜๋Š” PS๊ฐ€ ๋” ๋งŽ์€ "์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด"์™€ ๋” ์ ์€ ์—ฌํ–‰ ์œ„ํ—˜์„ ๊ฐ€์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋น ๋ฅธ ํŒŒ์ผ ์ด๋ฆ„ ๋ชฉ๋ก์€ ๋‚ด๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๊ธ‰๊ฒฉํžˆ ๋ณ€๊ฒฝํ•˜๊ณ  ์ž˜ํ•˜๋Š” ์˜์—ญ์„ ํ˜ธ์ „ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹น์‹ ์€ ํŒŒ์ด์ฌ์„ ์›ํ•˜๊ณ , ํŒŒ์ด์ฌ์ด ์กด์žฌํ•˜๊ณ , ์•„๋ฆ„๋‹ค์šด ์–ธ์–ด์ด๋ฉฐ, ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ์„ธ๊ณ„์— ๋งž์ถ”๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ๋‹ค๋ฅธ OS (์™œ, ๋งˆ์ดํฌ๋กœ ์†Œํ”„ํŠธ) ๋˜๋Š” ๋งˆ์ดํฌ๋กœ ์†Œํ”„ํŠธ์˜ ์•ฝ์†์— ์˜ํ•ด 30 ๋…„ ๋œ ์…ธ์˜ ๋ฒ”์œ„์™€ ํ•จ์ˆ˜ ๋ฐ˜ํ™˜ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ ํ•ด์„œ ๋ฐฉํ•ด๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ (๊ทธ๋ฆฌ๊ณ  .Net์— ๋Œ€ํ•œ ์ง‘์ฐฉ)์— ๋Œ€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์งˆ๋ฌธ์— ์ง๋ฉดํ•˜๊ธฐ๋ณด๋‹ค๋Š” ํ”ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” PS๊ฐ€ ๋” ๋งŽ์€ "์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด"์™€ ๋” ์ ์€ ์—ฌํ–‰ ์œ„ํ—˜์„ ๊ฐ€์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋„ 20 ๊ฐœ์˜ ์—„์ง€ ์†๊ฐ€๋ฝ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ PowerShell์ด โ€‹โ€‹์ทจํ•ด์•ผํ•˜๋Š” ํŒจํ„ด๊ณผ ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

For-EachObject๋Š” PowerShell ์ปฌ๋ ‰์…˜์„ ๊ฐ€์ ธ์™€ ์ฝ์„ ์ˆ˜์—†๋Š” ์Šคํƒ ์ถ”์ ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ์œ„ํ•œ PowerShell ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ €๋Š” Amazon์—์„œ ์ž‘์„ฑํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EC2 Windows ๋””์Šคํฌ๋ฅผ ๋‚˜์—ดํ–ˆ์Šต๋‹ˆ๋‹ค. https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/ec2-windows-volumes.html#windows -list-disks

๋ญ”์ง€ ๋งž์ถฐ๋ด? ์ด PC์— Initialize-AWSDefaults ์„ค์ •์ด ์—†์—ˆ๊ณ  ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์ž๊ฐ€ ForEach-Object๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ ์ถ”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค. _garbage_ :

PS C:\Windows\system32> D:\Installs\PowerShell\List-EC2Disks.ps1
Could not access the AWS API, therefore, VolumeId is not available. 
Verify that you provided your access keys.
ForEach-Object : You cannot call a method on a null-valued expression.
At D:\Installs\PowerShell\List-EC2Disks.ps1:39 char:12
+ Get-disk | ForEach-Object {
+            ~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [ForEach-Object], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull,Microsoft.PowerShell.Commands.ForEachObjectCommand

์ด๊ฒƒ์€ _ ์‚ฌ๋žŒ๋“ค์ด ์ฝ”๋“œ์—์„œ ForEach-Object ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค _ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ ์ถ”์ ์€ _ ํ•ญ์ƒ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค _. ์ด๊ฒƒ์„ ๋‹ค์‹œ ์“ฐ๋Š” ๊ฒƒ์€ ๊ณ ํ†ต ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ๊ณ ๋ง™๊ฒŒ๋„ ์ด๊ฒƒ์€ ์ž„์˜์˜ ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ณ  ์ €์žฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ํฐ ๋ชจ๋“ˆ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ชจ๋“ˆ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ ์™€์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ , ๋ฆฌํŒฉํ† ๋ง์—์„œ ์‹ ์ด ๊ธธ ๋ฐ”๋ผ๋ฉฐ, ForEach-Object ํ‘œํ˜„์‹์„ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ชจ๋“ˆ ์ „์ฒด์—์„œ ์–ด๋–ค ๊ฒƒ๋„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์•˜ ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค. REAL ์˜ค๋ฅ˜๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ์•Œ์•„ ๋‚ด์„œ _ ๋‚ด ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค _. ์ด์ œ PowerShell์˜ Write-Error ๊ฐ€ throw new Exception("message", ex) ์˜ C # ๊ฐ„๋‹จํ•œ ๊ด€์šฉ๊ตฌ์— ๋น„ํ•ด ๋”์ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ด์œ ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ฃผ์š” ์ €์žฅ์†Œ์—์„œ ๋ถ„๊ธฐ ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฉ๋„์ด์„ ๋‹ค์‹œ - ์“ฐ๊ธฐ for ($var in $list) ๋ณ€์ˆ˜์— ๊ฒฐ๊ณผ๋ฅผ ์ถ•์ , $results , ๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค :

PS C:\Windows\system32> D:\Installs\PowerShell\List-EC2Disks.ps1
Could not access the AWS API, therefore, VolumeId is not available. 
Verify that you provided your access keys.
You cannot call a method on a null-valued expression.
At D:\Installs\PowerShell\List-EC2Disks.ps1:58 char:26
+ ... lDevice = If ($VirtualDeviceMap.ContainsKey($BlockDeviceName)) { $Vir ...
+                   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull

์•„, ๊ทธ๋Ÿฐ๋ฐ์ด ์ž‘์—…์„ ํ•  ๋•Œ๋งˆ๋‹ค ๋ชฉ๋ก์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” PowerShell์˜ ์–ด๋ฆฌ์„์€ ๊ทœ์น™์ด ๊ธฐ์–ต ๋‚˜์ง€ ์•Š์œผ๋ฏ€๋กœ Google https://www.google.com/search?q=powershell+append๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. + ์ง๊ด€์ ์ด์ง€ ์•Š์€ PowerShell์˜ ๋ชฉ๋ก ์ž‘์—…์ด ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š” ์ง€ ์„ค๋ช…ํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€์— ๋Œ€ํ•œ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์„

C # ๋˜๋Š”์ด ์ž‘์—…์„ ์ž˜ ์ˆ˜ํ–‰ํ•˜๋Š” ์–ธ์–ด๋ฅผ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ์ด ๋™์ž‘์ด ๊ดœ์ฐฎ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ C #์€ AggregateException์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ž˜ํ•‘ํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ์ง€๋Šฅ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ ์˜ˆ์™ธ๋ฅผ ๋ชจ๋‘ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. PowerShell? ํ•˜ ํ•˜ํ•˜ํ•˜. ์˜ˆ, ๋„ˆ๋ฌด ์œ ์šฉ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jzabroski ์Šคํฌ๋ฆฝํŠธ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ณต์œ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์Šฌํ”„๊ฒŒ๋„ (_ ๊ทธ๋ฆฌ๊ณ  ํ–‰๋ณตํ•˜๊ฒŒ _) ๊ธฐ์–ต์ด ์•ˆ๋‚˜์š”. ํŒŒ์ผ ๊ณต์œ  ์˜€์œผ๋ฏ€๋กœ ๊ฑฐ์˜ ํ™•์‹คํ•˜๊ฒŒ ์ตœ๋Œ€ 1 ~ 2 ๊ฐœ์˜ ์ฝ”์–ด์˜€์Šต๋‹ˆ๋‹ค. ์ฝ”์–ด๊ฐ€ 2 ๊ฐœ์ธ ๊ฒฝ์šฐ ๋‚˜๋จธ์ง€ CPU๋Š” Windows Defender๊ฐ€ ์ฐจ์ง€ํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : Teams ์ฑ„ํŒ…์—์„œ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

$big32ย =ย Get-ChildItemย D:\Data\Website\Dataย -recurseย |ย Sort-Objectย lengthย -descendingย |ย select-objectย -firstย 32ย |ย measure-objectย -propertyย lengthย โ€“sum

์ถ”๊ฐ€ ๋ณด๋„ˆ์Šค๋กœ, ๋‚˜๋Š” ๋ฐฉ๊ธˆ์ด ๋ช…๋ น์„ ์‹คํ–‰ ํ•œ ์‚ฌ๋žŒ (๋งค์šฐ ๋‚˜์˜๋‹ค๊ณ  ๋Š๊ผˆ๋‹ค)๊ณผ ์ด์•ผ๊ธฐ๋ฅผ ๋‚˜๋ˆด์œผ๋ฉฐ ๊ทธ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ "DFS์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ๋ณต์ œ ๊ทธ๋ฃน ํฌ๊ธฐ ์กฐ์ • ์š”๊ตฌ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ฐ€์žฅ ํฐ 32 ๊ฐœ์˜ ํŒŒ์ผ์„ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ"์ด๋ผ๊ณ  ๋งํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ๊ณผ PowerShell์˜ ๋ฐ˜ํ™˜ ๊ฐ’๊ฐ„์— ์ฐจ์ด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ˜ผํ•ฉ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•„์ง ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ bash๊ฐ€ํ•˜๋Š” ์ผ์ด๋‚˜ ๋‹ค๋ฅธ ์‰˜์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ๊ฐœ๋…์„ ํ†ตํ•ฉํ•˜๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ์‹คํ—˜ ์ด์—ˆ์ง€๋งŒ ๊ฐ€๋…์„ฑ ๊ด€์ ์—์„œ๋Š” ์™„์ „ํ•˜๊ณ  ์™„์ „ํ•œ ์žฌ์•™์ด์—ˆ์Šต๋‹ˆ๋‹ค. Write-Output ๊ฐ€ PowerShell v6์—์„œ 16 ๊ฐœ์›” ๋™์•ˆ ์†์ƒ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

For-EachObject ์ถœ๋ ฅ์—์„œ @jzabroski Powershell Core๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์ด ์ €์žฅ์†Œ๊ฐ€ ์ „์šฉ). Powershell ์ฝ”์–ด๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๊ณ  ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. Windows ํŠน์ • ๊ธฐ๋Šฅ (์˜ˆ : Get-Disk)์€ Powershell Core์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ์ด ์ ์„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์—์„œ ์ด๊ฒƒ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•„์ง ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ bash๊ฐ€ํ•˜๋Š” ์ผ์ด๋‚˜ ๋‹ค๋ฅธ ์‰˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

$ test () { ls /tmp; ls /etc/pm; return 5; ls /v*; } ; x=$(test)
$ echo "$x"
tmux-1000
sleep.d
$ echo $?
0

๊ทธ๊ฒƒ์€ Bash ํ•จ์ˆ˜์— ๋ˆ„์ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ๋ช…๋ น์˜ ์ถœ๋ ฅ ์ด๋ฉฐ Bash๋Š” C #์—์„œ ๋ฐ˜ํ™˜ ํ•จ์ˆ˜๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ "Bash๊ฐ€ํ•˜๋Š” ์ผ์ด ์•„๋‹˜"์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

bash ์˜ˆ์ œ์— ๋Œ€ํ•œ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์บก์ฒ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. $? ๋•Œ๋ฌธ์— ๋ฐ˜ํ™˜์ด ์†์‹ค๋ฉ๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๊ฒฝ์šฐ '์—์ฝ”'.

$ test () { ls /tmp; ls /etc/pm; return 5; ls /v*; } ; x=$(test)
$ echo $?
5
$ echo $x
tmux-1000
sleep.d

POWERSHELL์€ ์ด๊ฒƒ์„ ๋‹ค๋ฅด๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

> function test() { ls; return 5 ; ls } ; $x=test
> echo $?
True
> echo $x
    Directory: c:\foo\bar

Mode                LastWriteTime         Length Name
----                -------------         ------ ----

๋” ๋งŽ์€ PowerShell ์ด์ƒํ•œ ์  :

Chocolatey๋Š” GODSEND ์ธ RefreshEnv.cmd๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. PowerShell๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? $ env๋ฅผ ์žฌ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์‰˜์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐ๋„ท์—์„œ ๋ฐ”๋ณด ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@jzabroski ์ด๊ฒƒ์€ https://github.com/PowerShell/PowerShell-RFC/pull/92 ์—์„œ ์ž๋ž์Šต๋‹ˆ๋‹ค.

PowerShell ๊ณต๊ธ‰์ž์— ๋Œ€ํ•œ ํ‘œ์ค€ ๊ฐœ์ฒด ๋ชจ๋ธ ๋งŒ๋“ค๊ธฐ : https://github.com/PowerShell/SHiPS/issues/66#issuecomment -368924485

SHiPS 66 ํ˜ธ์— ๋Œ€ํ•œ ๋งํฌ์—์„œ ๊ฐ€๋Šฅํ•œ ํ›„๋ณด cmdlet์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ต์‹ฌ cmdlet์— ๋Œ€ํ•ด Haskell typeclass ๋™์ž‘๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜์—†๋Š” ์ด์œ ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด API๋Š” ์ด๋ฏธ PowerShell์— ์žˆ์Šต๋‹ˆ๋‹ค.

@iSazonov ๋‹ต์žฅํ•˜๋Š” ๋‚ด์šฉ์„ ํŽธ์ง‘ ๋ฐ ์ธ์šฉํ•˜๊ณ  ์–ธ๊ธ‰ ๋œ API ๋ฌธ์„œ์— ๋Œ€ํ•œ ํ•˜์ดํผ ๋งํฌ์™€ ๊ฐ™์€ ์ปจํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? TYVM

@jzabroski srcSystem.Management.Automationnamespaces ํด๋”์˜ ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

POWERSHELL์€ ์ด๊ฒƒ์„ ๋‹ค๋ฅด๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅด๊ฒŒํ•˜๋Š” ๊ฒƒ์€ bash ์ž…๋‹ˆ๋‹ค. return ๋Š” (์ •์ˆ˜) ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ฝ”๋“œ ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ "return"์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ exit ). .

PowerShell์€์œผ๋กœ๋„ ๊ทธ๋ ‡๊ฒŒ ํ•  ์ˆ˜ exit 5

ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜ ์…ธ์ด ์•„๋‹ˆ๊ณ  ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์•„์•ผํ•˜๋ฏ€๋กœ PowerShell์—์„œ ์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ์ž์ฃผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์˜ˆ์•ฝ ๋œ ์ž‘์—… ๋ฐ ๋‹ค๋ฅธ OS์™€์˜ ์ƒํ˜ธ ์šด์šฉ์—๋งŒ ๊ฑฐ์˜ ์ ์šฉ๋จ).

ํ•˜๋ฃจ๊ฐ€ ๋๋‚˜๋ฉด stdout ํ•ธ๋“ค ์œ ํ˜•์„ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์ด PowerShell์—์„œ ์œ ์šฉํ•˜์ง€ ์•Š์€ ์ด์œ ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  out-null๋กœ "๋ฆฌ๋””๋ ‰์…˜"ํ•˜๋Š” ๊ฒƒ์ด [void] ๋กœ ์บ์ŠคํŒ…ํ•˜๊ฑฐ๋‚˜ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜์ง€ ์•Š์€ ์ด์œ ) $null )

์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์กฐ์น˜๋ฅผ ์ทจํ•˜๊ณ  ์‹ถ์€ ํ”ผ๋“œ๋ฐฑ์ด ์žˆ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ํŒ€์ด PowerShell์˜ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฒ„์ „์„ _ ๋ช…ํ™•ํ•˜๊ณ  ๋ถ„๋ช…ํ•˜๊ฒŒ ๋ฐฐ์ œ ํ–ˆ์œผ๋ฏ€๋กœ์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณ„์† ์ง„ํ–‰๋˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ...

ํŒ€์ด _ ๋ช…ํ™•ํ•˜๊ณ  ๋ถ„๋ช…ํ•˜๊ฒŒ ๋ฐฐ์ œ ๋œ _ ๋ฒ„์ „์˜ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”

๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ๋‰ด์Šค์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๊นŒ? ๊ฒŒ์‹œ๋ฌผ ๋˜๋Š” ๊ธฐํƒ€ ๋ฌธ์„œ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

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

๋ˆ„๊ตฐ๊ฐ€๋Š” powershell์„ ํฌํฌํ•˜๊ณ  ์ตœ์†Œํ•œ์˜ ๊ธฐ์ˆ  ๋ถ€์ฑ„๋กœ ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ทธ๋ฃน์€์ด ์Šค๋ ˆ๋“œ์— ์ œ์‹œ๋œ ์•„์ด๋””์–ด๋กœ๋ถ€ํ„ฐ ํ˜œํƒ์„๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ด๊ฒƒ์ด ์ง€๊ธˆ ์„ธ์ƒ์ด ๋Œ์•„๊ฐ€๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ตœ๊ณ ์˜ ํŒŒ์›Œ ์‰˜์ด ์ด๊ธธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.)

๋‚˜๋Š” ํŒ€์ด ์ด๋ฏธ powershell์—์„œ pwsh๋กœ ๋ช…๋ น์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด '์—ญ๋ฐฉํ–ฅ์ด ์•„๋‹Œ ํ˜ธํ™˜'๋ฒ„์ „์˜ powershell์„ ์ƒ์‚ฐํ–ˆ์Œ์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ํž˜ (SHELL)์€ ๊ป์งˆ์ž…๋‹ˆ๋‹ค. ์‰˜์˜ ์—ญํ• ์€ ๋””์ง€ํ„ธ ์‹œ์Šคํ…œ์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ์ธ๊ฐ„์˜ ์ ‘์ฐฉ์ œ ์—ญํ• ์„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ์™ธ๋ถ€ ์˜์กด์„ฑ์„ ๊ฐ€์ง„ ์ปดํŒŒ์ผ ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ „ํ†ต์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์กฐ์ฐจ๋„ ํš๊ธฐ์ ์ธ ๋ณ€ํ™”๋ฅผ ๊ณ„ํšํ•˜๊ณ  ๋งŒ๋“ญ๋‹ˆ๋‹ค.

POWERSHELL์€ ์ด๊ฒƒ์„ ๋‹ค๋ฅด๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅด๊ฒŒํ•˜๋Š” ๊ฒƒ์€ bash ์ž…๋‹ˆ๋‹ค. return ๋Š” (์ •์ˆ˜) ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ฝ”๋“œ ๋งŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹ค๋ฅธ ์กฐ๊ฐœ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๊ฑ”๋“ค ๋ญํ•ด? korn, csh ๋“ฑ

๋‹ค์Œ์€ ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ๋œ return ๋ฌธ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๊ธฐ์‚ฌ์ž…๋‹ˆ๋‹ค. https://en.wikipedia.org/wiki/Return_statement

์šด์˜ ์ฒด์ œ [์‰˜]์€ ๋ฆฌํ„ด ์ฝ”๋“œ ๋ฐ ์ถœ๋ ฅ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ๋ฆฌํ„ด๋˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ํŒ€์—๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด PowerShell 6์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ PowerShell 5์—์„œ๋งŒ ์‹คํ–‰๋˜๋Š” ๋‹ค์–‘ํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝํ—˜์ƒ PowerShell์ด โ€‹โ€‹์™„์ „ํžˆ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋œ๋‹ค๋Š” ์ „์ œ๋Š” ํ™•์‹คํžˆ ๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ทน๋‹จ์  ์ธ ๊ฒฝ์šฐ (์˜ˆ : ErrorActionPreference ๊ฐ€ ์ง๊ด€์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ)๋Š” ํ™•์‹คํžˆ ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€๋กœ ๋‹ค๋ฃจ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@chriskuech ErrorActionPreference ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@ SteveL - MSFT ๋‚˜๋Š” @KirkMunro ์ง์ ‘ @chriskuech ์ฝ”๋ฉ˜ํŠธ๋ฅผ ์•„๋ž˜์—ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์ด ์ฐพ๊ณ ์žˆ๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค ์—ฐ๊ฒฐํ•˜๋Š” ๋ชจ์ž์ดํฌ๋ฅผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ์ €๋Š” ๋ชจ์ž์ดํฌ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ธฐ์ˆ  ๋Œ€ํ™”์— ์ง‘์–ด ๋„ฃ์Šต๋‹ˆ๋‹ค.

์ฆ‰, @iSazonov ๋Š” 2018 ๋…„ 10 ์›” 1 ์ผ @chriskuech ์›๋ณธ ๋ฌธ์ œ๋ฅผ ๋งˆ๊ฐ https://github.com/PowerShell/PowerShell/issues/7774 ์ฐธ์กฐ

์ด๋Ÿฐ ๊ฒƒ๋“ค์ด ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๊ณ„์† ๋‚˜์˜ค๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๊ณ ,์œ„์›ํšŒ๋Š” ๊ทธ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@jzabroski ๋Š” ๊ทผ๋ณธ ์›์ธ์„ ๊ฒจ๋ƒฅํ•œ ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๊ณผ๊ฑฐ์— Invoke-WebRequest ์ฆ์ƒ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ .NET ๋ฉ”์„œ๋“œ๊ฐ€ ์ข…๋ฃŒ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ์‹คํŒจํ•œ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒด try / catch ์ƒ์šฉ๊ตฌ๋ฅผ ์™„์ „ํžˆ ์–ด๋ฆฌ์„์€ ์‚ฌ๋žŒ๋“ค์„ ๊ฐœ์ธ์ ์œผ๋กœ ๋ชฉ๊ฒฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐ€์ง€ ์‚ฌ๋ก€ ๊ฐ๊ฐ์—์„œ ์—”์ง€๋‹ˆ์–ด๋Š” ๊ทผ๋ณธ์ ์ธ ๋™์ž‘๊ณผ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์„ค๋ช… ํ•  ๋•Œ ์š•์„ค๋กœ ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด , ์ข…๋ฃŒ ์˜ค๋ฅ˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ์ด์œ ๋Š” PowerShell ์ž‘์„ฑ์ž๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ๋„˜์–ด์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ๋ฏฟ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ์ž๊ฐ€ ์‚ฌ๋ก€๋ณ„๋กœ ๊ฒฐ์ •ํ•œ ๊ฒƒ ์™ธ์—๋Š” ์•„๋ฌด๋„ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํ„ฐ ๋งŒ ์Šคํฌ๋ฆฝํŠธ๋ฅผ Stop , SilentlyContinue , Continue ๋“ฑ์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(์œ„์˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ ‘์„ )

PowerShell์ด โ€‹โ€‹์˜ตํŠธ ์ธ "ZeroTechDebt"๋ชจ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ $ErrorActionPreference = "Stop" ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ์ด ์„ค์ •์€ REPL์—์„œ ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ง ๊ทธ๋Œ€๋กœ ๋ชจ๋“  ์Šคํฌ๋ฆฝํŠธ์— $ErrorActionPreference = "Stop" ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์—ฌ "๋ฐฉ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  "๋ณดํ†ต"์ฒ˜๋Ÿผ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. " ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด.

@chriskuech ์•„์งํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด์ด RFC ์ปฌ๋ ‰์…˜์„ ์‚ดํŽด๋ณด์„ธ์š” : https://github.com/PowerShell/PowerShell-RFC/pull/187. ๊ทธ๋“ค์€ PowerShell์˜ ์ƒˆ๋กœ์šด ์ œ๋กœ ๊ธฐ์ˆ  ๋ถ€์ฑ„ ๋ฒ„์ „์ด ํ•„์š”ํ•˜์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋‚ด์šฉ์„ ์ง์ ‘ ๋งํ•ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ / ๋‹ค์ด์ œ์ŠคํŠธ๊ฐ€ ๋” ์‰ฌ์›Œ์ง€๋ฉด ํ•ด๋‹น ์ €์žฅ์†Œ์˜ ๋ฌธ์ œ ํŽ˜์ด์ง€์—์„œ ๋ณ„๋„์˜ ๋ฌธ์ œ์—์„œ 4 ๊ฐœ์˜ RFC๋ฅผ ์ฐพ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฒŒ์‹œ ํ•œ ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋ฅผ ์ฐพ์œผ๋ฉด ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ SteveL-MSFT ์—ฌ๊ธฐ ๋‚ด ์ƒ์‚ฐ์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ์œ ์‚ฌํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. $ErrorActionPreference ์•„๋‹ˆ๋ผ $ConfirmPreference .

์•„๋ž˜๋Š” SQL Server ๋””์Šคํฌ ๋ณผ๋ฅจ์„ 64kb๋กœ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•œ ์ถ”์•…ํ•œ ์Šคํฌ๋ฆฝํŠธ์ž…๋‹ˆ๋‹ค.

Import-Module Storage;

function Format-Drives
{
    # See https://stackoverflow.com/a/42621174/1040437 (Formatting a disk using PowerShell without prompting for confirmation)
    $currentconfirm = $ConfirmPreference
    $ConfirmPreference = 'none'

    Get-Disk | Where isOffline | Set-Disk -isOffline $false
    # The next line of this script is (almost) copy-pasted verbatim from: https://blogs.technet.microsoft.com/heyscriptingguy/2013/05/29/use-powershell-to-initialize-raw-disks-and-to-partition-and-format-volumes/
    Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -Confirm:$false -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize -IsActive | Format-Volume -FileSystem NTFS -AllocationUnitSize 64kb -Confirm:$false

    # See https://stackoverflow.com/a/42621174/1040437 (Formatting a disk using PowerShell without prompting for confirmation)
    $ConfirmPreference = $currentconfirm
}

Format-Drives

๋ช‡ ๊ฐ€์ง€ ์ธก๋ฉด ํฌ์ธํŠธ :

  1. Format-Volume ๋Œ€ํ•œ ๋ฌธ์„œ๋Š” ๋” ๋งŽ์€ ๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์˜ˆ๋งŒ? ๊ณต์‹ ๋ฌธ์„œ๋Š” https://github.com/MicrosoftDocs/windows-powershell-docs/issues/1170 ์›น ์‚ฌ์ดํŠธ์™€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด์— ๋Œ€ํ•œ GUI๋ฅผ ํ”ผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•ด StackOverflow๋กœ ์ด๋™ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
  3. ์ด๊ฒƒ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šฐ ๋ฉฐ "์ƒ๊ฐ์—†์ด"์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์–ด๋ฆฌ์„์€ ์ผ์ด์ง€๋งŒ https://github.com/PowerShell/PowerShell-RFC/issues/198 ๊ณผ ๊ฐ™์€ ๊ด€๋ จ ๋ฌธ์ œ์— ๋ฐ‘์ค„์„ ๊ธ‹๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ "์—์„œ Bruce Payette์˜ ์•ฝ์†์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์ž…๋‹ˆ๋‹ค." "PowerShell In Action"์€ ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์ž…๋ ฅํ•˜๊ธฐ ๋งŒํ•˜๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๊ฑฐ์ง“์ž…๋‹ˆ๋‹ค.
  4. @ mklement0 ์˜ ๋ฌธ์ œ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค : https://github.com/PowerShell/PowerShell/issues/4568

-Version์€ ์ตœ๋Œ€ ๋ฒ„์ „์„ ์ง€์ •ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

์ฐธ์กฐ : https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_requires?view=powershell-6

.NET Framework์™€ .NET Core๊ฐ„์— API๊ฐ€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒฝ์šฐ (์˜ˆ : AccessControl API์˜ ์ž‘๋™ ๋ฐฉ์‹) .NET Framework ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ๋กœ๋“œํ•˜๋Š” ๊ณ ๊ธ‰ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์ด๋Š” ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.

@jzabroski ๊ทธ๋Ÿฌ๋‚˜ ์—๋””์…˜์„ ์ง€์ •ํ•˜์—ฌ ์žˆ์Šต๋‹ˆ๋‹ค .

#requires -PSEdition Desktop
# versus
#requires -PSEdition Core

@rjmholt ๊ฐ€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ํ† ๋ก ์„ ๊ณต์‹์ ์œผ๋กœ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. # 13129.

๋˜ํ•œ # 6817 ๋ฐ # 10967์€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ํ—ˆ์šฉ๋˜๋ฉด ๋‹ค์‹œ ๋ฐฉ๋ฌธ ํ•  ๊ฐ€์น˜๊ฐ€์žˆ๋Š” ํ–‰๋™์ž…๋‹ˆ๋‹ค.
(https://github.com/PowerShell/PowerShell/issues/10967#issuecomment-561843650์— ์„ค๋ช… ๋œ ๋™์ผํ•œ ๊ทผ๋ณธ ์›์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค).

PowerShell์€ ์ˆซ์ž๋ณด๋‹ค ๋ชฉ๋ก์— ๋” ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— , ์ด + ๋ณด๋‹ค ๊ฐ•๋ ฅํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. IMHO.

@rjmholt ๊ฐ€ ๊ณต์‹์ ์œผ๋กœ ํ† ๋ก ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค

๋‹ค๋ฅธ ์–ด๋–ค ํ† ๋ก ๋ณด๋‹ค ๋” ๊ณต์‹์ ์ด์ง€ ์•Š๋‹ค๊ณ  ๋งํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฐ ํ•จ์ˆ˜ ์„œ๋ช… ํŽธ์ง‘ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์—„๊ฒฉํ•œ ๊ฒ€์‚ฌ๋ฅผ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
EcmaScript ๋ชจ๋“ˆ์ด ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ฐ€์ ธ ์˜ค๊ธฐ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ๋„์ž… ํ•  ๊ณ„ํš์ž…๋‹ˆ๊นŒ?
๋” ์ด์ƒ ๊ธ€๋กœ๋ฒŒ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์˜ค์—ผ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋Š๋ฆฐ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜.

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