ïŒ3240ããã®ãã©ããŒã¢ããã
ãã«æ¡ä»¶ã®ã¡ã³ããŒã¢ã¯ã»ã¹ïŒ ?.
ïŒãå®è£
ããã7.0ã§_experimental_æ©èœãšããŠå©çšã§ããããã«ãªããŸã
ãã ããäžäœäºææ§ã®ããã«ãå®è£
ã§ã¯çŸåšãå€æ°åã{...}
�
ã¯æè¡çã«ã¯å€æ°åã®æ£åœãªæåã§ããããã®äœ¿çšã«ã¯é©ãã»ã©{...}
å¿
èŠãªãããã§ãã
ã€ãŸãã $obj
ã$null
ïŒãŸãã¯æªå®çŸ©ïŒã®å Žåã«$obj.Method()
ãåŒã³åºãããšããè©Šã¿ãç¡èŠãããå Žåã¯ãCïŒãšåæ§ã«æ¬¡ã®ããã«ãªããŸãã
# Does NOT work as intended.
# 'obj?' as a whole is interpreted as the variable name.
$obj?.Method()
代ããã«ãçŸåšæ¬¡ã䜿çšããå¿ èŠããããŸãã
# !! Must enclose 'obj' in {...} to signal that '?' is a syntactic element as part of '?.'
${obj}?.Method()
_Update_ïŒãã«åäœ- $var??='default
ãš$a??$b
-ããã³äžé
æŒç®å- $var?1:0
-ãåæ§ã«åœ±é¿ãåããŸãïŒãã ãã ?
åã«ç©ºçœã䜿çšãããŸãïŒåé¡ã解決ããŸãïŒã
ãã®èŠä»¶ã¯ãïŒaïŒäºæããªããã®ã§ãããïŒbïŒé¢åã§ãã
æ°èŠãŠãŒã¶ãŒã¯{...}
ã®å¿
èŠæ§ãæåŸ
ããã以äžã倱æãããšãã«_it_ãå¿
èŠã§ããããšãå¿
ãããç¥ããŸããïŒ Set-StrictMode -Version 2
以äžãæå¹ã§ãªãéãããããã_undetected _ïŒïŒ $o = [pscustomobject] @{ one = 1 }; $o?.one
ãŠãŒã¶ãŒã{...}
ã®å¿
èŠæ§ãç¥ã£ããšããŠãïŒ
{...}
ã¯å
¥åãé£ããããããã®äžèŠäººå·¥çãªèŠä»¶ã¯ç¶ç¶çãªãã©ã¹ãã¬ãŒã·ã§ã³ã®åå ã«ãªããŸãã{...}
䜿çšã¯å¿
èŠãªãã¯ãã§ããããããå¿
èŠãšããªãããšã¯_ç Žå£çãª_å€æŽã«çžåœããŸãããééããªããã±ãã3ã«åé¡ãã
æ³šïŒ @rjmholtã¯ãPowerShellã®æ§æã®å€æŽã_äžè¬çã«_éåžžã«åé¡ãããçç±ã«ã€ããŠãã®ã³ã¡ã³ãã§èª¬æããŠããŸããã以äžã«ç€ºãçç±ãããããã§äŸå€ãäœæãã䟡å€ããããšæããŸãã
?.
ã¯_æ°ãã_æ§ææ©èœã§ãã å®çŸ©äžãããã䜿çšããã¹ã¯ãªããã¯ãå€ãããŒãžã§ã³ã§ïŒæå³ã®ããïŒå®è¡ã§ããŸãã-ã¬ã¬ã·ãŒããŒãžã§ã³äºæã®ã³ãŒããã¹ãæäŸããæ¡ä»¶ãç¹ã«è¿œå ããªãéããããã¯ã»ãšãã©äŸ¡å€ããªãããã§ã-ãã®åŸãã¬ã¬ã·ãŒæ©èœã«åºå·ããã ãã§ãã
ã¯ããå€æ°åãšããŠ$var?
ã䜿çšããŠããå€ãã¹ã¯ãªããã®$var?.foo
ã®è§£éã¯å£ããŸããã次ã®ããã«ãªããŸãã
?
ã¯ã {...}
å²ãããšãªããèå¥åã®äžéšãšããŠèš±å¯ãããã¹ãã§ã¯ãããŸããã§ããã
ããããããšãã§ããã®ã¯äºæ³å€ã§ãããããããå€ãã®äººã«ãšã£ãŠã¯_äžæ_ã§ãããããå人çãªçµéšããèšãã°ããã®ãããªå€æ°åã¯å®éã«ã¯éåžžã«ãŸãã§ããã @ mburszleyã®åæã¯ããå ·äœçãªèšŒæ ãæäŸããŸãã
?
ïŒããã³!
ïŒã®ã¿ãèš±å¯ãã_method_èå¥åã®ã¿ãèš±å¯ããŸããã»ãšãã©ã®RubyãŠãŒã¶ãŒã¯ãä»ã®èšèªããµããŒãããŠãããšæ³å®ããŠã¯ãªããªãããšãèªèããŠãããšæããŸããåãããšããããã£ãŠãå®çšçã«èšãã°ã次ã®ããã«ãªããŸãã
æ¢åã®ã³ãŒãã®å€§éšåã¯åœ±é¿ãåããŸãã- $var?.foo
ãªã©ã®ããŒã¯ã³ã¯åã«æ€åºãããŸããã
æ°ããã»ãã³ãã£ã¯ã¹ã§$var?.foo
ãèšè¿°ããå Žåãããã§ããå€ãããŒãžã§ã³ã§ãããå®è¡ãããšãæå¹ãªå³å¯ã¢ãŒãã«å¿ããŠãïŒæãããªæ¹æ³ã§äžæããã®ã§ã¯ãªãïŒç°ãªãåäœãçºçããå¯èœæ§ããããŸãããšã«ããæå³ãããšããã«ã³ãŒããå®è¡ããããã«å¿
èŠãªæå°ããŒãžã§ã³ãé©çšããŸã_ïŒ #requires -Version
ãã¢ãžã¥ãŒã«ãããã§ã¹ãããŒïŒã
å šäœãšããŠãããã¯ãã±ãã3ã®å€æŽã®æ確ãªã±ãŒã¹ã§ããæè¡çã«ç Žå£çãªå€æŽã§ãããæ¢åã®ã³ãŒããã»ãšãã©ç Žå£ãããå®éã®ã¡ãªãããæäŸããŸãïŒãŸãã¯ãéã«ãäºæããªãåäœã«ããæ°žç¶çãªé çã®çš®ãåé¿ããŸãïŒã
æ確ã«ããããã«ããã€ã«ã¹ããŒã³ã¯ãããŒã ããã£ãŒãããã¯ã«åºã¥ããŠè©±ãåãã¹ããã®ã§ããããšãæå³ããã ãã§ããããã®å€æŽãè¡ãããšãçŽæããŠããããã§ã¯ãããŸããã
@ mklement0
ïŒ {...}ã§å²ãŸãã«ãèå¥åã®äžéšãšããŠèš±å¯ãããã¹ãã§ã¯ãããŸããã§ããã
ããŒã-PowerShellã®æåã®åºæ¬èšèªã¯$ã䜿çšããPosixã·ã§ã«ã§ãããïŒ çµäºã³ãŒãqed 'ïŒ' åŒçšç¬Šã§å²ãŸããŠããªãå€æ°åã§èš±å¯ãããŸãã
ïŒæå³ã®ããïŒå€ãããŒãžã§ã³ã§ã¯å®è¡ã§ããŸãã
確ãã«ããã¯ã§ããŸãïŒ
PS> $abc?=@{a=1; b=2; c=3}
PS> $abc?.b 1
PS> 2
確ãã«ããã¯ã§ããŸãïŒ
_æ°ããã»ãã³ãã£ã¯ã¹ã§_ïŒnullæ¡ä»¶ä»ãã¢ã¯ã»ã¹ïŒæå³ã®ããå®è¡ã¯ã§ããŸãã-ãããç§ãèšãã€ããã®ãã¹ãŠã§ãã
ã¯ããããªãã®äŸã¯çŸåšæ©èœããŠããŸããã_ç°ãªãã»ãã³ãã£ã¯ã¹ã§_ïŒ abc?
?
_å€æ°åãšèŠãªããã?.
ã¯æåŸ
ã©ããã«æ©èœããŸãã
PowerShellã®æåã®åºæ¬èšèªã¯ãçµäºã³ãŒãã«
$?
ã䜿çšããPosixã·ã§ã«
$?
ã¯ãPOSIXã®ãããªã·ã§ã«ã®_äŸå€_ã§ãã 次ã®ããšã¯ã§ããŸããã
# bash, ksh, zsh, dash (all common /bin/sh implementations)
foo?='bar' # BOOM! E.g. "bash: foo?=bar: command not found"
ïŒãããŠãæããã«ãPowerShellã§$?
ãå»æ¢ããããã«æ±ãã人ã¯èª°ãããŸãããïŒ
ãããŠãåœç¶ã®ããšãªããã $?
ãšåãã¹ããŒã¹ã«ãã_ä»ã®ãã¹ãŠã®_èªåå€æ°ïŒã€ãŸãã $^
ãš$$
ïŒã¯æ瀺çã«ç¹å¥ã§ã-ããŒã¯ãã€ã¶ãŒã§ã±ãŒã¹ã«å
¥ããããŸãã ãããŠãå®éã®ãšãããïŒçŸåšïŒå¿
èŠã¯ãããŸãããã $?
ãããã§ãã
ã³ãŒããæžãããæç¹ã§ã ?
ã¯æå¹ãªèå¥åæåã§ã¯ãªããšäºæ³ãããŠããã®ã¯æããã ãšæããŸãã
ã¹ã¯ãªããã®å€æ°åã®æåŸã«?
ã䜿çšãã人ã¯1人ããç¥ããŸãããããã¯ã@ StartAutomatingã§ãã 圌ã¯å®éã«ãã®æ§æã䜿çšããŠããã®ã§ããã®è°è«ã«æ³šæãåãã䟡å€ããããšæããŸããã
ãŸãã @ vexx32 ã $?
ãããŒã¯ãã€ã¶ãŒã§ç¹æ®ãªã±ãŒã¹ã«ãªã£ãŠããçç±ã¯ã ?
ã§å§ãŸãååã®å€æ°ãäœæã§ããªãããã§ãã ããšãã°ã $??? = 'foo'
ã¯è§£æãããŸããã å€æ°åã¯è±æ°åãŸãã¯ã¢ã³ããŒã¹ã³ã¢ã§å§ãŸãå¿
èŠããããçŸåšã¯è±æ°åãã¢ã³ããŒã¹ã³ã¢ããŸãã¯çå笊ãå«ããããšãã§ããŸãã ?.
ãnullæ¡ä»¶ã®ã¡ã³ããŒã¢ã¯ã»ã¹æŒç®åãšããŠè§£æããå¿
èŠãããããšã«åæããŸããã ?
ãããŒã¯ãã€ã¶ãŒã§ç¹æ®ãªã±ãŒã¹ã«ãªã£ãŠããçç±ãæ確ã«ããããšæããŸããã
ãã®ãã£ããã«æ³šæãåããŠãããŠããããšãã
ãã®äŸ¡å€ã«ã€ããŠãç§ã¯ããã€ãã®èããæã£ãŠããŸãïŒ
ãããã£ãŠãæ°åŠãå®è¡ãããšããããå®è¡ããªãå ·äœçãªçç±ãããã€ãããããããå®è¡ããçç±ã¯1ã€ã ãã§ãïŒäžéšã®ãŠãŒã¶ãŒã«ãšã£ãŠã¯ãããç°¡åãªå ŽåããããŸãïŒã ã®æç çãäœãããšãèãããšïŒ å€æ°åã§ã¯ãããªãã¯ããªãã害ãããããå€ãã®äººã ãå©ãããããããŸããããç§ã®æèŠã§ã¯ããã¯ã³ã€ã³ãã¹ã§ãã
ãã®ãããªã³ã€ã³ãã¹ã®å©çã®å¯èœæ§ãèããŠãç§ã¯ãããŒãã»ãã¯ããã©ãèšãæããŸãã
$obj?.Method()
<var i="9">Method</var>()
ãããã©ã«ãã§$<var i="6">obj</var>
?.
<var i="9">Method</var>()
ãã $<var i="11">obj?</var>
.
ã®ã¿ãã©ãŒã«ããã¯ããããã«ããããšããå§ãããŸã<var i="14">Method</var>()
ã $obj
ãã¹ã³ãŒãã«ååšããªããã $obj?
ã¯ååšãã #requires âVersion
ã¯v7 +ã§ã¯ãªãå Žåã
@ ExE-ãã¹ãããã¯ãã®ç¹å®ã®ã«ãŒã«ã®ããã«äœãå€ãã®äŸå€ã®ããã§ãã
ãã®ç¹å®ã®ã«ãŒã«ã®äŸ¡å€ã«ã€ããŠã®è³ªåãç¹°ãè¿ããŸãã
ãããéãããšãåé¡ã¯ãç§ãã¡ãå£ãå¯èœæ§ã®ããå€æ°æ§æã«ã€ããŠä»ã«äœãããããªãã®ãããšããããšã§ãã
ã³ã³ã»ã³ãµã¹ãããã«${...}
æ§æã匷å¶ããããšã§ããå Žåããã®æ§æã䜿çšããç§ã®ãããªäººã
ïŒç§ã¯ããã_ãããã䜿çšããŸãïŒããã€ãºããªããã¢ãŠãã§ããããã«ãããã§OptionalFeaturesã®ãµããŒããããã ããã°å¹žãã§ãã
ããã§èšãæããŠããã®ã§ïŒ
ãè«çã¯ãå€ãã®äººã®ããŒãºãå°æ°ã®äººã®ããŒãºãäžåã£ãŠããããšãæ確ã«ç€ºããŠããŸããã -ã¹ããã¯
ãããã£ãŠãæ°åŠãå®è¡ãããšããããå®è¡ããªãå ·äœçãªçç±ãããã€ãããããããå®è¡ããçç±ã¯1ã€ã ãã§ãïŒäžéšã®ãŠãŒã¶ãŒã«ãšã£ãŠã¯ãããç°¡åãªå ŽåããããŸãïŒã
@StartAutomating ïŒè€æ°ã®çç±ãããããããã¯ææ§ã§ã¯ãªãå
·äœçââã§ãã ãŸããããã®ç®æšã®1ã€ã¯ãã³ãŒãã®åçŽãã§ãã å€æ°åã{}
ã©ããããå¿
èŠãããããšã¯ããã®ç®æšã«çŽæ¥åããŸãã
ç§ã¯ããã«ã€ããŠ@ mklement0ãš@KirkMunroãš${...}?
æ§æã¯äžèªç¶ã§äžå¿
èŠã«è€éã ãšæããŸãã ãã§ã«é倧ãªå€æŽããããŸãããããã®å Žåãæ確ããšåŒãæãã«æ¯æãã®ã¯å°é¡ã§ãã
@StartAutomating
- ããã«ãäºæããªãå€æ°åã«åé¡ãããã»ãšãã©ã®äººã¯ã$ {}æ§æãåŠç¿ããŸãïŒãã§ã«ã¢ã³ããŒã¹ã³ã¢ã§èªç¶ã«ãããããŠããŸãïŒã ããã®æ©èœã䜿çšããã人ããšã$ {}æ§æããã§ã«ç¥ã£ãŠãã人ãã®ãã³å³ã®éè€ã¯ã»ãŒ100ïŒ ã«ãªããšæããŸãã
ããã¯æã¡ããããŸããã ã¢ã³ããŒã¹ã³ã¢ã¯ãå€æ°åã®æå¹ãªæåã§ãã
@ vexx32
ã³ãŒããæžããããšãã«ãããæåŸ ãããŠããããšã¯ç§ã«ã¯æãããªããã§ã
ãããã
æåã亀æããŸããïŒ $foo.?Property
ã¯è¡çªããŠããªãããã«èŠããŸããããã¯ãçå笊ã§å§ãŸãããããã£åã¯ãã§ã«åŒçšç¬Šã§å²ãå¿
èŠãããããã§ãã
PS C:\> $foo = [pscustomobject]@{'?'=1; '?name'=2}
PS C:\> $foo.?name
At line:1 char:6
+ $foo.?name
+ ~
Missing property name after reference operator.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingPropertyName
PS C:\> $foo.'?name'
2
@HumanEquivalentUnitã¯ãæ®å¿µãªãããCïŒãä»ã®ããã€ãã®èšèªã§äœ¿çšãããŠããèèã®?.
æ§æãšã®æ°žé ã®æ··ä¹±ãæããŸãïŒãŸããã€ã³ãã¯ãµãŒã®ä»£æ¿åœ¢åŒïŒ ${arr}?[0]
ãèŠã€ããå¿
èŠããããŸãïŒ $arr[0]?
ãããªãã®ã¯ãäžé
æŒç®åãšã®æ··ä¹±ãæããŸãïŒ
ãã¡ããšãã解決çã¯ãããŸããã
(dir *.ps2)?.count
ãš(dir *.ps1)?.count
ã¯ããªãã©ã³ããå€æ°ã§ããå¿
èŠããªãããšã瀺ããŠããŸãã($Host)?.toString()
/ ($null)?.toString()
ãããšãååãäžãã£ãã§å²ãå¿
èŠããªããªããŸãã ããã¯ãŸã äœåãªããŒã¹ãããŒã¯ã§ãããããè«ççã§éããã®ã§ã¯ãããŸããã
- #requiresã«åºã¥ããŠåäœãå€æŽããããšã¯ãä¿åãããã¹ã¯ãªããã®å€éšã§ã¯æ©èœããã誰ããã¿ã°ãèšå®ããã«é·ãã¹ã¯ãªããããã³ãŒããã³ããŒãããšããã«å€±æããŸãã
ããã¯ã以åã®ããŒãžã§ã³ã§ãµããŒããããŠããªãæ©èœã䜿çšãã_any_ã³ãŒãã«é©çšãããŸãã
ãããæåªå
ã®æžå¿µäºé
ã§ããå Žåãæ°ããèšèªæ©èœãæ°ããã³ãã³ãã¬ãã/ã³ãã³ãã¬ãããã©ã¡ãŒã¿ãŒã¯å°å
¥ãããŸããã
ïŒããŸãããã°ãå€ãã³ãŒãã§ã¯å°ãªããšãSet-StrictMode -Version 1
ãæå¹ã«ãªã£ãŠããŸãããã®å Žåã var?
ãšããååã®å€æ°ãååšããªãããã $var?.foo
ã¯å€§é³éã§å€±æããŸãïŒã
- ååãäžãã£ãã§å²ãå¿ èŠããªããªããŸãã
眮æ(...)
ãã{...}
ãããããæ¹åãããŠããŸãã
䜿çšããè¿œå ã®æ§æãäœã§ãããããã§ã®åé¡ã¯ãè¿œå ã®æ§æã®_å¿ èŠæ§_ã§ããå ¥åã®å©äŸ¿æ§ã ãã§ãªãã_è³¢æãªæåŸ _ãæºããããã«ãããã®ãŸãŸæ©èœããå¿ èŠããããŸãã
- #requiresã«åºã¥ããŠåäœãå€æŽããããšã¯ãä¿åãããã¹ã¯ãªããã®å€éšã§ã¯æ©èœããã誰ããã¿ã°ãèšå®ããã«é·ãã¹ã¯ãªããããã³ãŒããã³ããŒãããšããã«å€±æããŸãã
ããã¯ã以åã®ããŒãžã§ã³ã§ãµããŒããããŠããªãæ©èœã䜿çšãã_any_ã³ãŒãã«é©çšãããŸãã
ãããæåªå ã®æžå¿µäºé ã§ããå Žåãæ°ããèšèªæ©èœãæ°ããã³ãã³ãã¬ãã/ã³ãã³ãã¬ãããã©ã¡ãŒã¿ãŒã¯å°å ¥ãããŸããã
ããã¯ç§ãæå³ããããšã§ã¯ãããŸããã§ããã ããã«äžã«ãïŒrequiresãæå®ãããpwsh 7ãå¿
èŠãšããå ŽåãåŠçãç°ãªãå¯èœæ§ããããšããææ¡ããããŸããã #requiresãå
¥åããå Žåã«ã®ã¿ãæ°ããåäœãç¹ç¯ããŸã
ïŒããŸãããã°ãå€ãã³ãŒãã§ã¯å°ãªããšã
Set-StrictMode -Version 1
ãæå¹ã«ãªã£ãŠããŸãããã®å Žåãvar?
ãšããååã®å€æ°ãååšããªãããã$var?.foo
ã¯å€§é³éã§å€±æããŸãïŒãç§ã®çµéšã§ã¯ãSet-Strictmodeã¯ããŸã䜿çšããŠããŸããã ïŒaïŒãããªãã®ããã©ã«ãã¯ãæ£ããããšããä»®å®ããããïŒbïŒããããªãã«ãªã£ãŠããããšã«äŸåãããã®ã䜿çšããé »åºŠãé«ãããããã§ãã ãããã®æŒç®åã®äžè¬çãªäœ¿çšæ³ã§ãã ãããã«ãããåé¡ã¯$ varã®å€ãã³ãŒãã§ããïŒ ååšããfooããããã£ãæã£ãŠããŸãããã³ãŒãã¯$ varãæ¢ããŸã... $ varãååšããªãããã«strictmodeãèšå®ãããŠããå Žåãæ°ããåŠçã«ãã£ãŠãšã©ãŒãçºçããå¯èœæ§ããããŸã...ã
- ååãäžãã£ãã§å²ãå¿ èŠããªããªããŸãã
眮æ
(...)
ãã{...}
ãããããæ¹åãããŠããŸããã¯ãã ïŒ$ xïŒã¯$ {x}ãããããã«åªããŠããŸããããããã§ãã ïŒ
Get-user "Bob")?.disable()
ã¯ãããåªããŠããŸã
$u = get-user "bob"
($u)?.disable
䜿çšããè¿œå ã®æ§æãäœã§ãããããã§ã®åé¡ã¯ãè¿œå ã®æ§æã®_å¿ èŠæ§_ã§ããå ¥åã®å©äŸ¿æ§ã ãã§ãªãã_è³¢æãªæåŸ _ãæºããããã«ãããã®ãŸãŸæ©èœããå¿ èŠããããŸãã
ã¯ãã
$var. foo
ãã¯ã€ãã¹ããŒã¹ã§åäœããŸãã ${foo} ?.bar()
ã¯ããã§ã¯ãããŸãããïŒ é¢æ°åãŸãã¯ãšã€ãªã¢ã¹åã§èš±å¯ãããŸãïŒïŒãã¯äž¡æ¹ã§æå¹ã§ãïŒã ç©äºãå£ããã«æ¢åã®æ§æã«ãŒã«ã«CïŒæ§æã®ããããã©ãã·ã³ã°ããããšã¯ãåžžã«å®çšçã§ãããšã¯éããŸããããããã¯CïŒã§å©çšå¯èœã§ã...ãã¯ããã¯ããå¿
èŠã«å¿ããŠCïŒãã©ãã«ãããç¥ã£ãŠããŸãããšããçãã«å€ããå ŽåããããŸãã
:-)
SemVerã®äºææ§ãç¶æããã«ã¯ããããã¡ãžã£ãŒãªãªãŒã¹ïŒã§ããã°7.0.0 ïŒã§å®è¡ããå¿ èŠããããŸãã
äžèšã®ç§ã®ææ¡ãåç §ããŠãã ããïŒ
@ ExE-Bossã¯ããïŒrequiresã«å¿ããŠæåã«èãããã®ã¯è¯ãèãã§ã¯ãªããããããªããšèšã£ããšãã«ç§ãèšåããã®ã¯ããªãã®ã³ã¡ã³ãã§ããã
ã¯ããæ¢åã®ã¹ã¯ãªãããå£ãå Žåã¯ãã¡ãžã£ãŒããŒãžã§ã³ãå€æŽããããšãã«å®è¡ããå¿
èŠãããããããããè¿
éã«å®è¡ããããV8ãåŸ
ã€å¿
èŠããããŸãã
ãããã¯ãŸã å®éšçãªæ©èœã§ãããRC-1ã§ã¯ããã©ã«ãã§ãªãã«ãªã£ãŠããŸããããã¯åºè·æã®è£œåã§ãåãã§ãããšæããŸãã ããã«ãããåäœãå€æŽããããšãã§ããŸãïŒãŸãã¯ã2çªç®ã®å®éšçãªæ©èœã«ããããšãã§ããŸãïŒãç¹å®ã®æåã§çµããå€æ°ãäœæããããšãããšããããã¯/èŠåããå¿ èŠããããŸãã ãããæå¹ã«ããŠãããç§ã«è²¬ä»»ãè² ããã誀ã£ãå€æ°åã®ã¹ã¯ãªããã䜿çšãããå Žå-ãã¡ãããããŠã³ããŒãããã¹ã¯ãªããã¯ãå£ãããããã«èŠãããå®éšçããããŒã®äžã§ãã蚱容ã§ããããšãæå³ããŸãã
ç§ã¯çé¢ç®ãªPowerShelléçºè ã§ã¯ãããŸããã ç§ã¯ãã°ã®è§£æ±ºçãæ¢ããŠããã«æ¥ãŸããããããŸããŸãã®åé¡ã«ééããŸããã ã³ãã³ãã©ã€ã³ã¹ã¯ãªããã§ã¯ãäž»ã«bashã䜿çšããŸãã ç§ã¯ãããããMicrosoftãPowerShell Coreã«åãæ¿ãããã説åŸããããšããŠãã人å£çµ±èšã«ããŸããã¯ãã¹ãã©ãããã©ãŒã ã®éçºè ã¯ãbashãããç°¡åãªã¹ã¯ãªããèšèªãå¿ èŠãšããŠããŸãã
PowerShellã®æ§æã«é¢é£ãã決å®ã®å€ãã¯ãäž»ã«PowerShelléçºè ã§ã¯ãªã人ã ã«ãšã£ãŠçŽæçã§ã¯ãªãããšããããããŸãã ååPowerShellãæ·±å»ãªç®çã§äœ¿çšãããšããnullåäœæŒç®åããŸãã¯ä»£ããã«äœ¿çšã§ãã3é æŒç®åããªãããšã«æç¶ãšããŸããããã®çµæã
@StartAutomatingã¯èšã£ãïŒ
éåžžã«ãªã¿ã¯ãªäººã¯å¥ãšããŠã$ {obj}ïŒãMethodïŒïŒãŸãã¯$ objïŒ.MethodïŒïŒã¯å°ãäžæãããšæããŸãã ããã«ãã«ã管çããæ¹æ³ã«ã€ããŠã®10幎éã®ã¬ã€ãã³ã¹ããŠã§ãäžã«ãããŸãããããŠç§ã¯å€ãã®äººã ãv7ã®ææµã«ä¹ãããã ãã«ifïŒ$ objïŒ{$ obj.MethodïŒïŒ}ããåãæ¿ããã®ãèŠãŸãã
ç§ã¯n = 1ã§ãããPowerShell以å€ã®éçºè ãšããŠãç§ã¯åŒ·ãå察ããŸãã æ°ãã ïŒ æ§æã¯ãPowerShellã«è§Šãã人ãæ°ãæã«1åçšåºŠã§ãã£ãŠããããã«ããããã®ã§ãããå°æ¥ã代æ¿æ段ã®ä»£ããã«PowerShellã䜿çšããå¯èœæ§ã確å®ã«é«ãŸããŸãã 次ã«ãäžäœäºææ§ã®ããã«ããã€ãã®ã¯ã¬ã€ãžãŒãª{}æ§æãå¿ èŠã§ããããšãããã£ãå Žåã¯ãç®ã転ãããŠããã§ã«äœ¿çšããŠãããã®ã«æ»ããŸãã
ããã§ã¯ãäžäœäºææ§ã匷調ãããŠããããšãç解ããŠããŸããã PowerShell Coreã¯ã.NET Coreã«ãªã.NETã®éšåã䜿çšããŠãããããæ¢åã®ã¹ã¯ãªããã®ã»ãšãã©ããã§ã«å£ããŠããŸããã ïŒç§ã¯ããã«ã€ããŠäžå¹³ãèšã£ãŠããŸãã--.NET Coreã¯çŽ æŽãããã§ãããäžäœäºææ§ãå£ãã€ãããªããä»ããã£ã³ã¹ã§ããïŒ
ãŸããç§ã®æåã®ãã£ãŒãããã¯ã誀解ã®æ··ä¹±ãåŒãèµ·ããããšæããŸãã
ç§ã®æšæž¬ã§ã¯ã$ {}ã¯_PowerShelléçºè ã«ãšã£ãŠããã»ã©å¥åŠãªãã®ã§ã¯ãªã_ããªããªããå€æ°ã«ïŒãåã蟌ãã ããšãããã°ããã®æ§æ圢åŒããã§ã«ç¥ã£ãŠããå¿ èŠãããããã ã ãŸãã¯ãæååã«ã¢ã³ããŒã¹ã³ã¢ãä»ããŸãã
ãã®æ§æã¯PowerShell以å€ã®éçºè ã«ãšã£ãŠæ±ãã«ããå¯èœæ§ãããããšãå€ãã®äººã«æãåºãããŠãããŠããããšãã
ãã£ãŒãããã¯ã®2çªç®ã®éšåã¯ãããã¯ã¹ã§å€±ãããå¯èœæ§ããããŸããnullåäœã«ä»£ããä»ã®æ¹æ³ãPowerShellã«ä»¥åããååšããåºã䜿çšãããŠããããããã®æ©èœã_æ¢åã®PowerShellãŠãŒã¶ãŒã§_ã©ã®çšåºŠåäžãããããããŸããã ããªãã¯å ¥ã£ãŠæ¥ãŠããããã¯ç§ãPowerShellã䜿ãå§ããããã«å¿ èŠãªããšã®1ã€ã§ãããšèšãããã®ã§ãããç§ã¯ããªãã®æèŠã«ç°è°ãå±ããããšã¯ã§ããŸããïŒèšèªã®æšãæ¢ããŠããã¯ãŒã«ãªæ©èœã®æ£®ãæ¬ ããŠãããšèšããããããŸããã芪ãã¿ãããïŒã
ç§ã®ãã£ãŒãããã¯ã®3çªç®ã®ãããã¯ãäžé£ãåãã«å¹ãé£ã°ãããããã§ãã $ IsThisRightã®ãããªååã®å€æ°ãæã 䜿çšããããšããã人ã®1人ãšããŠè©±ããŸããïŒ =ãã¹ã-äœãããã®å€æ°ã®å¶éã«é¢ããæœåšçãªãã¥ãŒã¹ãèãããšãã®ç§ã®æåã®åå¿ã¯ãããŸããããã€ãã®å€æ°ã®ååãå€æŽããå¿ èŠããããšæããŸããããšã«ããããã»ã©å€ãã¯åŸãããŸããã§ãããã§ããã
ãããã£ãŠãã¹ã¬ãããèšãæããŠçµäºããããšãããšã次ã®ããã«ãªããŸãã
ãŸãã¯ãç°¡æœã«èšããšã次ã®ããã«ãªããŸãã
å¿ èŠã«å¿ããŠããã®å€æŽãè¡ã£ãŠãã ããã ãã®ã¬ãŒã¹ã«ã¯å°ããªéŠ¬ãããŸãã ãããè¡ãããšã«ããå Žåã¯ãå€æ°ã«ïŒãä»ããŠååãä»ããä»ã®äººãããããã«ãå€æŽãæ確ã«ãããŒããã£ã¹ãããŠãã ããã ããã«å¿ããŠæŽæ°ã§ããŸãã
ãã£ãŒãããã¯ã®2çªç®ã®éšåã¯ãããã¯ã¹ã§å€±ãããå¯èœæ§ããããŸããnullåäœã«ä»£ããä»ã®æ¹æ³ãPowerShellã«ä»¥åããååšããåºã䜿çšãããŠãããããæ¢åã®PowerShellãŠãŒã¶ãŒã§ãã®æ©èœãã©ã®çšåºŠåäžãããããããŸããã
ç§ã¯ééããªãããã«åæããŸãããããŠç§ã¯ããªãã®æèŠãåŠå®ããããããŸããã ãã®ãããªé倧ãªå€æŽãå ããããšã¯åžžã«å°é£ã§ããç¹ã«ããã®èšèªããã§ã«é »ç¹ã«äœ¿çšããŠãã人ã ã«ãšã£ãŠããã®ä»£æ¿æ段ãçŽæçã§ããå¯èœæ§ãããå Žåã¯ãªãããã§ãã
ããªãã¯å ¥ã£ãŠæ¥ãŠããããã¯ç§ãPowerShellã䜿ãå§ããããã«å¿ èŠãªããšã®1ã€ã§ãããšèšãããã®ã§ãããç§ã¯ããªãã®æèŠã«ç°è°ãå±ããããšã¯ã§ããŸããïŒèšèªã®æšãæ¢ããŠããã¯ãŒã«ãªæ©èœã®æ£®ãæ¬ ããŠãããšèšããããããŸããã芪ãã¿ãããïŒã
ãããšãPowerShell以å€ã®ã»ãšãã©ã®éçºè ã¯å®éã«ã¯ãããã®äŒè©±ã«åå ããŠããªããšæããŸãããããã«å¶ç¶åºããããã®ã¯ããŸã£ããã®å¶ç¶ã§ãã ç§ã®PowerShellã®äœ¿çšæ³ã¯ãã©ã€ãã©ãªããªãŒãã³ãœãŒã¹ããŒã«ãäœæããŠãã人ãšã¯å€§ããç°ãªãå¯èœæ§ããããŸãã ç§ã¯ãPowerShellã掟æãªãã¬ãŒã ã¯ãŒã¯ãšããŠäœ¿çšããã®ã§ã¯ãªããå¥åŠãªã¿ã¹ã¯ãã§ããã ãéãå®è¡ããããã«äœ¿çšããŠãã人ã®èŠç¹ãäžããã ãã ãšèããŸããã ããã¯ä»ã®æèŠãåŠå®ããããšãæå³ãããã®ã§ã¯ãããŸãã-ããã¯ããããããã§ã¯ããã»ã©é »ç¹ã«èŠãããªããšãã芳ç¹ããã®åãªãå¥ã®æèŠã§ãã
PowerShellã®äœ¿çšãéå§ããããã«å¿ èŠãªã®ã¯ãnullåŠçã®æ¹åã ãã§ã¯ãããŸãããããã¯ã2çªç®ã®ããšã§ãã 1ã€ç®ã¯ã¯ãã¹ãã©ãããã©ãŒã ã®ãµããŒãã§ãããããããã©ããŸã§é²ãã§ãããã«éåžžã«æéãåããŸããã å人çã«ã¯ãç¹å®ã®ã¿ã¹ã¯ãå®è¡ããèšèªãéžæãããšããæ§æç³è¡£æ§æã¯ç§ã«ãšã£ãŠå€§ããªåé¡ã§ããæ§æã«ãã£ãŠãå®è¡ããŠããããšãç°¡åã«ãªããŸãã å€ãã®äººãç¶æããå¿ èŠã®ãããã®ãæžããŠããå Žåã¯ããã£ãšåé·ã«ããããšæãã§ãããã ãã ãã管çã¿ã¹ã¯ãŸãã¯DevOpsã¿ã¹ã¯çšã®ç°¡åãªã¹ã¯ãªãããäœæããŠããå Žåã¯ãnullãªã©ããã°ãããã¹ãããæ¹æ³ãå¿ èŠã§ãã
ç§ã®ãã£ãŒãããã¯ã®3çªç®ã®ãããã¯ãäžé£ãåãã«å¹ãé£ã°ãããããã§ãã $ IsThisRightã®ãããªååã®å€æ°ãæã 䜿çšããããšããã人ã®1人ãšããŠè©±ããŸããïŒ =ãã¹ã-äœãããã®å€æ°ã®å¶éã«é¢ããæœåšçãªãã¥ãŒã¹ãèãããšãã®ç§ã®æåã®åå¿ã¯ãããŸããããã€ãã®å€æ°ã®ååãå€æŽããå¿ èŠããããšæããŸããããšã«ããããã»ã©å€ãã¯åŸãããŸããã§ãããã§ããã
äžäœäºææ§ãåªå ããããšã¯ãåžžã«å ¬æ£ãªè°è«ã§ãã ãã ãããã®ç¹å®ã®ã±ãŒã¹ã§ã¯ããšã«ããCoreãžã®ç§»è¡ã«ãããå€ãã®PowerShellã¹ã¯ãªãããå£ãããã«ãªã£ãŠããããã§ãã äžäœäºææ§ãå®æçã«å£ãããšã€ã©ã€ã©ããŸãããäžåºŠã«å£ããå€æŽãçºçããããšãæ¯æããŸããããã¯ããããè¯ãææã§ããããšãæå³ããŸãã
ãŸã£ããæ°ãã人å£çµ±èšãã€ãŸãWindowsäžå¿ã§ã¯ãªãéçºè ãã¿ãŒã²ããã«ããããšããŠããã·ããªãªã§ã¯ããã§ã«ååšãããã®ãšç«¶äºããããã«ãããã€ãã®é倧ãªå€æŽãå ããå¿ èŠããããããããŸããã
ãããè¡ãããšã«ããå Žåã¯ãå€æ°ã«ïŒãä»ããŠååãä»ããä»ã®äººãããããã«ãå€æŽãæ確ã«ãããŒããã£ã¹ãããŠãã ããã ããã«å¿ããŠæŽæ°ã§ããŸãã
æ確ã«ããããã«ãç§ã¯ãã®æ©èœããªããã€ã³ããå¿
èŠãããããšã«åé¡ã¯ãããŸãã-ããã¯ç§ãPowerShellã䜿çšããããšãæããšã©ãŸãããããšã¯ãããŸããã ç§ã¯ãã§ã«ãbashã¹ã¯ãªããã®å
é ã«ããããã®set
ã³ãã³ããå¿
èŠã«ãªãããšã«æ
£ããŠããŸãã çæ³çãšã¯æããŸããããååã«ææžåãããŠããéããPowerShellã䜿çšãããšããç§ã®æ±ºå®ã«ã¯ã»ãšãã©åœ±é¿ããŸããã
å人çã«ã¯ãç¹å®ã®ã¿ã¹ã¯ãå®è¡ããèšèªãéžæãããšããã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã¯ç§ã«ãšã£ãŠå€§ããªåé¡ã§ãã
ãã®åŸãããªãã¯æ£ããèšèªã«æ¥ãŸããïŒ PowerShellã¯ãã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã䜿çšããç©æ¥µçãªãµã¯ãªã³ã§ãã
ç¥ããªã人ãæè²ããããã«ãPowerShellã§ããã€ãã®æ¹æ³ããnullcoaleseãããããšãã§ããŸãã
ã$ ListWhereNotNull = $ nullã1ã2ã$ nullã3 -ne $ nullïŒããã«ãããåã¢ã€ãã ãnullã§ãªãããšã確èªããã1,2,3ã®ãªã¹ããè¿ãããŸãã$ FirstNonNull = @ïŒ$ nullã1ã$ nullã2 -ne $ nullïŒ[0]ïŒããã¯æåã®énullãè¿ããŸã$ lastNonNull = @ïŒ$ nullã1ã2ã$ null -ne $ nullïŒ[-1]ïŒããã¯ãè² ã®ã€ã³ããã¯ã¹ã䜿çšããŠãæåŸã®énullãè¿ããŸã$ TheObjectPipelineWay = $ nullã1ã$ nullã2 | Select-Object -First 1$ TheAssigningForeachWay = foreachïŒ$ nullã1ã2ã$ nullã3ã4ã®$ itemïŒ{ifïŒ$ item -ne $ nullïŒ{$ item;
ä»ã®ãšããããã§ååã§ãããèšèªæ§æãéåžžã«æè»ã§ããããšã®ãã€ã³ãã蚌æããã¯ãã§ãã ãããã®ãã¢ã¯ãã¹ãŠãPowerShell1.0ãŸã§ããã®ãŒã£ãŠæ©èœããŸãã
ãã ãããã®ç¹å®ã®ã±ãŒã¹ã§ã¯ããšã«ããCoreãžã®ç§»è¡ã«ãããå€ãã®PowerShellã¹ã¯ãªãããå£ãããã«ãªã£ãŠããããã§ãã
ããã§ããªãã¯ééã£ãŠããŸãã Coreã«ã¯å®éã«ã¯æ§æãå£ãå€æŽãã»ãšãã©ãªããã³ã¢ã§åé¡ãªãåäœãããšæããããããå€ãã®ã¢ãžã¥ãŒã«ããããŸãïŒ+ -LinuxãšWindowsã®ãã¹/æ¹è¡ã«é¢ããããã€ãã®åé¡ïŒã ããå®çšçã«ã¯ãWindowsãã©ãããã©ãŒã åºæã®APIäŸåé¢ä¿ãããå Žåãã¢ãžã¥ãŒã«ãCoreã§åäœããå¯èœæ§ã¯äœããªããŸãïŒããšãã°ãLinuxã§WPFã©ãããŒãåäœãããããã«æ¯ãåãã€ããã¯ãããŸããïŒã
æ§æãå€æŽããŠããã©ã¡ãã®æ¹æ³ã§ãåé¡ã¯ãããŸãããææ°ã®å¿çã®2ã€ã®ã¢ãµãŒã·ã§ã³ã«å¯ŸåŠããåŒã³åºãå¿ èŠããããšæããŸããã
ReïŒç³è¡£æ§æãç§ã®ç®èãªå¿ã¯æ ç»ãã¹ãããããåŒçšããŠããŸãïŒãç§ã¯ãã§ã«ååã«çãã§ãã
ReïŒã³ã¢ã®å€åã®å¯èœæ§ãæã¡ç ŽãïŒä»ã¯ã»ãšãã©ãªãã®ã§ãã§ããéããã®ããã«ä¿ã¡ãŸãããã
@StartAutomating ïŒããªãã¯ç§ãæã€ããšãã§ããªããšèšã£ãŠããŸããïŒ ãã£ãšç ç³ãå ¥ããå ŽæããŸã ããã®ã§ð
ç¥ããªã人ãæè²ããããã«ãPowerShellã§ããã€ãã®æ¹æ³ããnullcoaleseãããããšãã§ããŸãã
ç§ã¯ãããç解ããŸããïŒããã¯ç§ãæžããç§èªèº«ã®çãã§ãïŒããããã¯æšã¿ã®ããã«æããŸããã ããã¯å€ãã®å¯èœæ§ãç§ããã¯ãŒã«ãªã¢ã€ãã¢ã§ããããã®Stack Overflowã®åçã«å¯Ÿããããã³ã¡ã³ãè
ãææããããã«ãè©äŸ¡ã¯ç絡ããŸããã ?.
æŒç®åã¯ãåŒã³åºã/ããããã£ããã§ãŒã³ãããšãã«ããããéåžžã¯åé¡ã§ã¯ãªããªã£ãããšãæå³ããŸãã ãããã2013幎ã«ã¯å©çšã§ããŸããã§ãããããã§ãããããã®äŸã§ã¯éåžžã«å€ãã®ããšãè¡ãããŠãããã³ã¡ã³ãã§äººã
ããã®æ··ä¹±ãã©ã®ããã«æããããèŠãããšãã§ããŸãã ãããã®äŸãã·ã³ãã«ããšã«äœãããã®ããæ£ç¢ºã«åæããå¿
èŠããããŸããã
ããã§ããªãã¯ééã£ãŠããŸãã Coreã«ã¯å®éã«ã¯æ§æãå£ãå€æŽãã»ãšãã©ãªããã³ã¢ã§åé¡ãªãåäœãããšæããããããå€ãã®ã¢ãžã¥ãŒã«ããããŸãïŒ+ -LinuxãšWindowsã®ãã¹/æ¹è¡ã«é¢ããããã€ãã®åé¡ïŒã ããå®çšçã«ã¯ãWindowsãã©ãããã©ãŒã åºæã®APIäŸåé¢ä¿ãããå Žåãã¢ãžã¥ãŒã«ãCoreã§åäœããå¯èœæ§ã¯äœããªããŸãïŒããšãã°ãLinuxã§WPFã©ãããŒãåäœãããããã«æ¯ãåãã€ããã¯ãããŸããïŒã
ç§ã¯ãå®éã«é©åãªçµ±èšã調ã¹ãŠåéããã®ã§ã¯ãªãããã®ç¹ã«é¢ããçµéšãã話ããŠããã ãã§ãã ããšãã°ãCore以åã§ã¯ã [System.Web.Security.Membership]::GeneratePassword(32, 6)
䜿çšããŠãã¹ã¯ãŒããçæã§ããŸãããã System.Web
ã¯Coreã§ã¯äœ¿çšã§ããŸããã ïŒããããå€ãSystem.Web.dllãããŒãã§ããããšã¯ããã£ãŠããŸãããããŒãããå¿
èŠããªãå Žåã¯ããŒãããããããŸãããïŒæ§æã®å€æŽã¯ãAPIãæ¬ èœããŠãããããå®éã«è§£æ±ºããã®ãç°¡åã§ãã devkitçšã«å€§éã®Dockerã·ãŒã¯ã¬ãããçæããããšã¯ãç°¡åãªã¹ã¯ãªããã䜿çšããã®ã«æé©ãªå Žæã®ããã«æããŸãããPowerShellCoreã§ã¯bashãããé©ãã»ã©åé·ã§ãã ãã¡ãããbashã®ãœãªã¥ãŒã·ã§ã³ã¯ããªãéãããã«èŠããããšããããããŸãã
ReïŒç³è¡£æ§æãç§ã®ç®èãªå¿ã¯æ ç»ãã¹ãããããåŒçšããŠããŸãïŒãç§ã¯ãã§ã«ååã«çãã§ãã
å Žåã«ãããŸãã PowerShellãéåžžã«å¿«é©ã ãšæããããšããããŸãã nullã«å¯ŸåŠããããšã¯ãç§ãéåžžãã®ããã«æããªãéèŠãªé åã®1ã€ã§ãããã ããå€ãã®èšèªã§åãããšãèšããŸãã ãŸããåŸæ¥ã®ã€ã³ã©ã€ã³PowerShell if-elseã¹ããŒãã¡ã³ãã¯ãäžé
æŒç®åãbashã®&&
ããã³||
ãã§ãŒã³ãšæ¯èŒããŠæ±ãã«ãããšæããŠããŸãã ããã¯ãäœå¹Žãåã«PowerShellããé¢ããåå ãšãªã£ãéèŠãªåé¡ã®1ã€ã§ãããããèšåãã䟡å€ããããšæããŸããã
äžæ¹ãç§ã¯æ¥åžžçã«å€çš®å€æ§ãªèšèªãæ±ã£ãŠãããäœãæžããŠããŠãããããã¯èšèªXã®æ¹ãã¯ããã«ç°¡åã ããããšåžžã«èããŠããŸããç§ã¯èšèªXã䜿çšããŠããŸããããããã¯èšèªYã®æ¹ãã¯ããã«ç°¡åã ããããšèããŠããŸãã ã§ããããããã倧声ã§èšãæ©äŒããããå€åèšèªã®æ¹åæ§ãæºããããªããç§ã¯ãããåããŸãã
ç§ã¯ããã§èããå€ããããšã«ããŸãèå³ããªãããã å¥ã®èŠç¹ãè¿œå ããã ãã§ãã
@StartAutomating ïŒããªãã¯ç§ãæã€ããšãã§ããªããšèšã£ãŠããŸããïŒ ãã£ãšç ç³ãå ¥ããå ŽæããŸã ããã®ã§ð
ç§ã¯ãã€ãæ°ããã·ã³ã¿ãã¯ã¹ã·ã¥ã¬ãŒã倧奜ãã§ãïŒ ç§ã¯ãããŠã£ãŒã³ã§ããªãã¯ãªã¢ããªãŒããããåäŸã®ãããªããã°ã©ãã³ã°èšèªãéžæããŸãã
@ZenexerïŒç§ã¯æ¬åœã«PowerShellã®ãããªãç§ã¯ã ç§ã¯å¹žéã«ãPSãåºç¯å²ã«ãããŠæ¯æ¥ä»äºã§è¡ãããšãã§ããŸãã ç§ã¯æè»æ§ãç¹ã«.NETãšã®å
±çã倧奜ãã§ãã ãã®ãããç§ã¯ãã®æ¹åãæ°ã«ãã ${...}?
æ§æãåãå
¥ããã®ãéåžžã«é£ããã®ã§ãã
è¯ãç¹ã§ãããããã€ãæ確ã«ããŠãããŸãã
è¯ããæªããããããŸã§ã®PowerShellã¯ã»ãã³ãã£ãã¯ããŒãžã§ãã³ã°ã䜿çšããŠããŸããã
æ°ããã¡ãžã£ãŒããŒãžã§ã³ã¯ãäžäœäºææ§ãžã®ç¢ºåºããã³ãããã¡ã³ããåãã_new_æ©èœã®ã¿ããããããŸããã
ã¯ãã¹ãã©ãããã©ãŒã ãžã®ç§»è¡ãåå ã®äžéšãšããŠãé倧ãªå€æŽãCoreã«å¿ã³å¯ãå§ããŸããã
ã¡ãžã£ãŒããŒãžã§ã³v7.0ã¯ãäžäœäºææ§ã®_å¢å _ãéç¥ããããã«éžæãããŸãããããã¯ãWindowsPowerShellã®å®è¡å¯èœãªä»£æ¿æ段ãæäŸããè©Šã¿ã§ãã
å€ãã®æŽå²çãªåé¡ã¯ãæ¢åã®ã³ãŒãã倧å¹
ã«å£ããã«ä¿®æ£ããããšã¯ã§ããªãããããªãã·ã§ã³ã®ïŒãªããã€ã³ïŒæ©èœãšããŠã®ã¿æäŸã§ããŸããã
ãã±ãã3ã®ç Žå£çãªå€æŽã¯ãåžžã«ãªãã·ã§ã³ã§ããå¿
èŠããããŸããæ¢åã®ã³ãŒããç Žå£ãã_å¯èœæ§ããã_ä¿®æ£/æ¹åãè¡ããŸãããå®éã«ã¯ãããªãå¯èœæ§ã¯äœãã§ãã çµå±ã®ãšãããèšèªãæ¹åããããšã¯äŸ¡å€ããããŸãã
OPã§è°è«ãããŠããããã«ãæå ã®ã±ãŒã¹ã¯ãã±ãã3ã®å€æŽãšããŠç§ã襲ããŸãã _some_ã¹ã¯ãªãããå£ããããšã¯ããã£ãŠããŸããïŒ @StartAutomatingã¯ã¹ã¯ãªãããä¿®æ£ããæ¹æ³ãç¥ã£ãŠããŸãïŒãããŒã¿ã¯ãã®ãããªã±ãŒã¹ãéåžžã«ãŸãã§ããããšã瀺åããŠããŸãã
ãªãçããã®ã§ããïŒ
å€æ°åã§?
ã䜿çšããããšã¯ã»ãšãã©ã®äººã«ãŸã£ããèµ·ãããªãã®ã§ããããããªãã圌ãã¯ããã_ {...}
ãªãã§åäœããããšãæåŸ
ãã¹ãã§ã¯ãããŸãã_ïŒä»¥äžã®ãã¹ãŠãã§ã®ã¿åäœããå Žå{...}
ã ?
ã§ç°ãªããšäºæ³ãããã®ã¯ãªãã§ããïŒïŒ . , ;
ïŒ :
ã¯åžžã«æ¬¡ã®ããã«è§£éãããããããŸã£ãã䜿çšã§ããŸããããã©ã€ãã»ãã¬ãŒã¿ãŒïŒ
{...}
ãå¿
èŠãšããã«$var?
ã$va?r
ãªã©ã®ååãèš±å¯ããããšã¯ãåé¡ãèŠæ±ããå¯å®¹ãã§ãããåââé¡ãçºçããŸãããããã¯ããã®å Žåã®ããã«ãèšèªã
CïŒã«è§Šçºããã3ã€ã®æ°ããé¢é£æ©èœïŒå°ãªããšãæ§æ圢åŒã§é¢é£ïŒããããŸãïŒ
(Get-Date).Second % 2 ? 'odd' : 'even'
$var ?? 'default'
ããã³$var ??= 'default'
$possiblyNull?.ToString()
ãããã¯ãã¹ãŠæ§æã®äžéšãšããŠ?
ãæã£ãŠããã ?.
æãæçœã§ããããããã¯ãã¹ãŠã¬ã¬ã·ãŒ$var?
解æã®è² æ
ã®åœ±é¿ãåããŸãã
$var?1:0
ãããªãã®ã¯ã³ãŒããŽã«ãã¡ãŒã«ã®ã¿é¢å¿ããããšäž»åŒµããããšãã§ããŸããã ?
ã«æ§ææ©èœãããå Žåã¯åé¡ãªãæ©èœããŸããçŸåšã ?
åã«_space_ã䜿çšããå¿
èŠããããŸãã
察ç
§çã«ã誰ãã$var??='bar'
ïŒãããã$baz = $foo??$bar
ïŒãè©Šã¿ãã®ã¯åççã§ãããšç§ã¯æããŸããããããçŸåšã¹ããŒã¹ãå¿
èŠãšããŸãã
ã€ãŸããçŸåšã®$var?
解æã«åºå·ãããšãïŒçšåºŠã¯ç°ãªããŸããïŒ_3_ã®æ°æ©èœã劚ãããããã®ãã¡ã®2ã€ã¯ãã§ã«äžè¬ã«å©çšå¯èœã§ãïŒå®éšçã§ã¯ãããŸããïŒã
{...}
ãèŠæ±ããéã®åé¡ã¯ãå
¥åã®äžäŸ¿ãã ãã§ã¯ãããŸããããããããå¿
èŠæ§ãäºæãããåŸã§å¿
èŠæ§ãå¿ããïŒåŸ®åŠãªèª€åäœã®å¯èœæ§ãããïŒããã§ããããã¯ãšãŠãçŽæã«åããŸãã
@ ExE-BossãããŒãžã§ã³æ¡ä»¶ä»ãã®åäœãå®è£ ãããšåé¡ãçºçãããšãã
@ mklement0 ïŒããã¯äžèªç¶/çŽæã«åãã/ããªãã®ååã§ãã ãã©ã±ããã¯ç¡¬ããäžæ¬åŒ§ã¯ããã«ç¡¬ããªããŸãã ãã®å Žåããããã¯å¿ èŠãããŸããã
@ mklement0åæãæç«ããŠãããã
PowerShellã«CïŒæ§é ãè¿œå ããŠãããŸã å®å
šã«åã¡åãããŠããŸããã ããŒããŒãã«ååãªèšå·ããªããšããåé¡ããã§ã«å€ãã®å Žæã§çºçããŠããŸãã ">" "ãã倧ãã"ããŸã㯠"ãªãã€ã¬ã¯ã"ã§ããïŒ "="å²ãåœãŠãŸãã¯ãã¹ãã®å¹³çã§ãïŒç°ãªãèšèªã§ã¯ãå²ãåœãŠã«ïŒ=ã䜿çšããããå¹³çã«==ã䜿çšããŸãïŒã èšèªéããžã£ã³ããã人ã
ã¯ã -eq
ãŸãã¯-gt
䜿çšãå¿ããŠããŸããç§ãã¡ã¯ããã«åºå·ããŸã...ã¯+ç®è¡å ç®ããŸãã¯æåå/é
åã®é£çµã§ãã *ã¯ä¹ç®ãšã¯ã€ã«ãã«ãŒãã®äž¡æ¹ã§ãã ïŒ
ã¯ã¢ãžã¥ãã§ããã forEach-object.
ãšã€ãªã¢ã¹ã§ãã
貧ãã ïŒ Where-Object.
ã®ãšã€ãªã¢ã¹ã§ãããèªåå€æ°ã®ååã§ãã ãããã Get-Alias ?
ãŸãã¯Get-Variable ?
å®è¡ããŠã¿ãŠãã ãã...ãããããšãã¯ã€ã«ãã«ãŒãã®åœ¹å²ãæãããŸãã
Get-PSdrive
ãå®è¡ãããšããå€æ°ããªã©ã®ååã®æ«å°Ÿã«ãïŒãããªãããšãããããŸããååã«ïŒãè¿œå ãããšããã©ã€ããšããŠæ±ãããŸãã ãã¡ãããããªãã"$drive="C"
ãæžããŠãããã«ç¶ããŠ"$drive:temp"
ãåç
§ããªãéããPowerShellãåããŠäœ¿çšãã人ïŒããã³ãPowerShellã«ã€ããŠèããŠããªãå Žåã¯ãäžéšã®å€ã人ïŒã¯ãèªåãã¡ãããããšãç¥ã£ãŠå°æããŸããååä»ãã¹ã³ãŒãããã©ã€ãããçºæããŸããã
ãããã£ãŠãããã«å¯ŸããŠ...ãïŒããšãïŒããããã«äœ¿çšããŠæ°ããæ§æãäœæãããšèšããããããŸããã ã°ããããªãã®ïŒ'
IIRCããã€ãã¿ãŒ@BrucePayã¯ãäžé
æŒç®åããããŸãPowerShellyã§ã¯ãªãããšèª¬æããŠãããç§ã¯åæããåŸåããããŸãã ãããããCïŒã®ããã«ããšãã声ããã®æ¥ãåã¡åããŸãã...
ã»ãšãã©ã®äººã¯$PSEdition.length -gt 2
ãæžãã§ããã
ãã ãã $PSEdition. length-gt2
ãæ©èœããŸãïŒ2ã€ã®ååã®éã«æ¹è¡ãå
¥ããããšãã§ããŸãïŒã "ã" ãŸãããçŸåšã®ãã£ã¬ã¯ããªããããã®ã¹ã³ãŒãã§å®è¡ãããã¡ã³ããŒããšããŠæ©èœãããªãŒããŒããŒãããããŸãããã ããPS V1-V5ã§ã¯ãå
é ã«ã¹ããŒã¹ãå¿
èŠãšããæŒç®åã¯èããããŸããã ããã 1ã€ãååšããå Žåãç Žå£ããã®ã¯å¥åŠã§ãã ãã ãã解æããããã«ãäžé
æŒç®åã«ã¯å
é ã®ã¹ããŒã¹ãå¿
èŠã«ãªãå ŽåããããŸã
$host.debuggerEnabled?0:1
ã¯ãïŒã ããããã£ã®äžéšãšã¯èŠãªãããŸãã
$IsCoreCLR?0:1
ã¯ãïŒã å€æ°åã®äžéšã§ãããšèŠãªãããŸãã
nullåäœæŒç®åã«ã€ããŠãåãããšãèšããŸãã
$null?? "default"
ã«ã¯ã¹ããŒã¹ãå¿
èŠã§ã$true.length?? "default"
ã¯å¿
èŠãããŸããã
åé¡ã®äžéšã«ããå ã®ãŠãŒã¹ã±ãŒã¹ãå°ãã®éçåŽã«çœ®ããŸãã äžèšã®ã±ãŒã¹ã¯ãäœããå®å šã«æ©èœããŠããªãããšã瀺ããŠããŸãã ãïŒããå«ãå€æ°åã®å Žåã¯ä¿®æ£ãããŸãã ããããå«ãååã®ããã«ãã¬ãŒã¹ããå¿ èŠããããŸããã ãŸãã¯ã+ããŸãã¯ãïŒããããã³ãïŒãã®ã¡ã€ã³ãŠãŒã¶ãŒã§ãã@StartAutomating ååã§ã¯ãããã¯_åŠçã§ãããã¬ãŒã¯_ã ãšèããŠããŸãã nullã¡ã³ããŒã«å°éããåã«ãããã§ã«ãããè¡ãæ¹æ³ãèŠã€ãããããã«èãããŸãã
å¿ èŠãªå®éšçæ©èœãå°å ¥ããããã®çãæéæ ããããšæããŸããïŒ ååã§å²ãŸãããã®æ©èœããªã³ã®å ŽåïŒããã©ã«ãã§ããå¿ èŠããããŸãïŒããã¹ãŠæ°ããã§ããïŒ æŒç®åã¯ããã«å¿ããŠè§£æããå¿ èŠããããŸãã ãã®æ©èœããªãã®å Žåã«ã®ã¿ãããŒãµãŒã¯ãããã®æŒç®åã§ã¹ããŒã¹ãŸãã¯äžæ¬åŒ§ãå¿ èŠãšããŸããããã¯é倧ãªå€æŽã§ããããªãã·ã§ã³ãèšå®ãããŠããªãéããäžéšã®ã¹ã¯ãªããïŒå®éåã§ããªãå°ããªæ°å€ïŒãç ŽæããŸãïŒå€æ°åãèš±å¯ããªããš$ IsItãé²æ¢ãããŸãïŒ ïŒ.tostringïŒïŒã¯ã¹ã¯ãªããã®æåã®ãšã©ãŒã§ãããããã¹ã¯ãªããã¯å€±æããã¯ãã§ãããå±éºãªã»ã©å®è¡ãããªãã¯ãã§ãïŒã çæ³çã«ã¯ããã€ã³ããªãªãŒã¹ã§ã¯çºçããªãã¯ãã§ãïŒPowerShellãå®éã«sem-verã䜿çšããŠããªãããšã«ã€ããŠã¯æ£ããã§ãããããã§ãè¯ãååã§ãïŒ
{...}ãèŠæ±ããéã®åé¡ã¯ãå ¥åã®äžäŸ¿ãã ãã§ã¯ãããŸãããããããå¿ èŠæ§ãäºæãããåŸã§å¿ èŠæ§ãå¿ããŠããŸãããšã§ãïŒåŸ®åŠãªèª€åäœã®å¯èœæ§ããããŸãïŒããšãŠãçŽæã«åããŸãã
ããã¯è¯ãç¹ã§ãããå®éã«ã¯${...?}
ã«ã€ããŠç§ãæ©ãŸããããšã«ãªããŸãã {}
ã䜿çšããããšãç¥ã£ãŠããŠããæçµçã«ã¯å¿ããŠããŸãå¯èœæ§ãé«ããæ§æçã«ã¯ãŸã æå¹ã§ãããããæåã¯æããã§ã¯ãªã埮åŠãªãã°ãçºçããå¯èœæ§ããããŸãã $var??='bar'
ã¯ãã®è¯ãäŸã§ãããç§ã¯éåžžãééã«ããªã泚æãæã£ãŠããŸãã
ãããã§ã @ jhoneill ãããã¯ãPowerShellã§å€ãã®2åïŒ3åã...ïŒã®åœ¹å²ãæãããŠããã·ã³ãã«ã®æ°ã瀺ãè¯ãäŸã§ãã
ã»ãšãã©ã®å Žåã次ã®çç±ã«ããããã¹ãŠã®äœ¿çšæ³ãèªèããŠããã°ãããã¯åé¡ã§ã¯ãããŸããã
*
ãšã¯ã€ã«ãã«ãŒãæåãšããŠã®*
�
ã®ããŸããŸãªã³ã³ããã¹ãã«ã¯ãå®éã«ã¯ãç¹å®ã®æœè±¡åã¬ãã«ã§å
±éç¹ããããŸãã Get-ChildItem | ? Target
ã $var?.Target
ã $?
?
ãèããããšãã§ããŸãã $?
ã $var ?? 'none'
ã¯ãã¹ãŠäžçš®ã®_question_ãå«ã¿ããããã£ãŠ_test_ãŸãã¯_conditionalbehavior_ãå«ã¿ãŸãã+
ãæååãšã®é£çµãå®è¡ããïŒãåé¡ã®ããäŸã¯&
ïŒåŒã³åºãæŒç®åãšããã¯ã°ã©ãŠã³ãæŒç®åïŒã§ããããã¯ã_position_ã®ã¿ã«å¿ããŠãç°ãªãã»ãã³ãã£ã¯ã¹ã§åãã³ã³ããã¹ãã§äœ¿çšãããŸãã
ãïŒããå«ãå€æ°åã®å Žåã¯ä¿®æ£ãããŸãã ããããå«ãååã®ããã«ãã¬ãŒã¹ããå¿ èŠããããŸããã ãŸãã¯ã+ããŸãã¯ãïŒã
確ãã«ãç¹°ãè¿ãã«ãªããŸããå€æ°åã§?
ã䜿çšããæ©èœããªããªãããšã¯ãããŸããããä»åŸã¯{...}
ã䜿çšããå¿
èŠããããŸãïŒ ${var?} = @{ foo=1 }; ${var?}?.foo
ããªãã瀺ãããã«ã誰ãã®èŠ³ç¹ããã¯ã ?
ãæå¹ãªæåã§ããããšãè³¢æã«æåŸ
ããŠããŸããã .
ãæ£åœãªäŸå€ã§ãã ?
ã¯Where-Object
ãšããŠïŒãæ£åœãªçç±ããããŸããåŸã«ã¹ããŒã¹ãå¿
èŠãšããgci|?target
ã¯æ©èœããŸããïŒãã³ãã³ãåã¯ç©ºçœã§åŒæ°ããåºåãå¿
èŠããããŸãã
.
ãšã¡ã³ããŒåïŒ $obj. foo
ïŒã®éã«ç©ºçœãå
¥ããããšãã§ããããšã¯ãäž»ã«è€æ°è¡ã®ã¹ããŒãã¡ã³ãã§æå³ããããŸãããããããä»ã®èšèªã§ããç¥ãããŠããããèªã¿ããã圢åŒã¯ïŒãŸãïŒ .
_å_ã«ç©ºçœãèš±å¯ããŸãïŒ
# This does NOT work - the . must be *immediately after* the expression / member
(Get-Date)
.ToUniversalTime()
.TimeOfDay
ããããããšãã§ããããšã¯ã_next_è¡ã«|
ãé
眮ããæè¿è¿œå ãããæ©èœãåæ ããŸãã
# Already works in PS Core
Get-Date
| % ToUniversalTime
| % TimeOfDay
ãã ããããã«ãããããããœãŒã·ã³ã°æŒç®åãšããŠ.
ãã .
ã§å§ãŸãã³ãã³ãåã䜿çšããããšã解決ã§ããªããããŸãããçããŸãããã ããå¯èœæ§ã¯äœãã§ãã ïŒããšãã°ãæ¹è¡ã®. foo
ã¯ãããããã£ã¢ã¯ã»ã¹ããŸãã¯foo
ãšããååã®é¢æ°ãŸãã¯ã¹ã¯ãªãããããããœãŒã¹ããã³ãã³ãã§ããå¯èœæ§ããããŸãïŒ $env:PATH
ïŒã ; .foo
ã¯_command_ã®ååã§ããå¯èœæ§ããããŸãïŒã
@KirkMunroã®è€æ°è¡ç¶ç¶RFCã¯ã_commands_ãè€æ°è¡ã«ãŸãããããšãèš±å¯ããããšã«çŠç¹ãåœãŠãŠããŸããã次åã®è§£æ±ºçãæäŸããŸã-https ãã ããã
å®éšçæ©èœãããã©ã«ãã§ãªã³ã«ãªã£ãŠããå ŽåïŒå¹žãã_preview_ãªãªãŒã¹ïŒãªãªãŒã¹åè£ã§ã¯ãªãïŒã¯ãããã©ã«ãã§_all_å®éšçæ©èœããªã³ã«ããããã«ãªããŸããã ãã ãã Enable-ExperimentalFeature
ã -Scope
ãŸãã¯-Scope CurrentUser
ã䜿çšããŠãããã§æå¹ã«ããæ©èœã䜿çšããŠå®è¡ããããšãããå Žåã¯ããããæ°žç¶çã«äžæžããããããšã«æ³šæããŠãã ããã
@ mklement0ç§ã¯åºæ¬çã«ãã®ãã¹ãŠã«åæããŸãããç§ãã¡ã¯ããªããããã«æã£ãŠããäœåãªæçã§ãã®ç¹å®ã®è°è«ãå°ã
?
ãéåžžã®å€æ°åã®æåãšããŠèš±å¯ãç¶ããããšã¯ããŠãŒã¶ãŒã«ãšã£ãŠããããéåžžã«æ··ä¹±ããããšã«åæããŸããæåã䜿çšãããšçªç¶ç©ºçœãææã«ãªããå°ãªããšãæŽå²çã«ã¯ãå€æ°åã«_ever_ã¯ãªããšæããŸããéå»ã«ç©ºçœã«ææã§ããã
ãã®ãããŸãããå°å
¥ããããšã¯ãé倧ãªå€æŽãå ããŠå€æ°åã§ã®?
䜿çšãçŠæ¢ããããšãããåé¡ã ãšæããŸãã é倧ãªå€æŽã«ãããPSSAã«ãŒã«ãç°¡åã«äœæããŠãæ§æãèš±å¯ãããªããªã£ãããšãäœæè
ã«èŠåã§ããŸãã ãã ãããã®éã¯ããã»ã©ç°¡åã«ã¯åœãŠã¯ãŸãããé倧ãªå€æŽãšã¯ç°ãªããå¿
ããããšã©ãŒã«ãªããšã¯éããŸããã ãŠãŒã¶ãŒãééã£ãå€æ°ã誀ã£ãŠãµã€ã¬ã³ãã«åç
§ããŠããŸãå¯èœæ§ãéåžžã«é«ãããããèªåã®ããŠããããšã§ããããšãããããŸããã
@ PowerShell / powershell-committeeãããã«ã€ããŠè©±ãåããPowerShellã³ãŒãã¹ã®ã¹ã¯ãªãããåæããçå笊ã§çµããå€æ°åãããªã䜿çšãããŠããŸããã ãã®ãããPowerShellå€æ°åãäžæ¬åŒ§ã§å²ãããšã¯ã§ããŸãããããã¯ãå€æ°åãä»ã®æåïŒæååå ãªã©ïŒãšåºå¥ããããã®æ¢åã®èšèªæ©èœã§ãã
ã¹ã¯ãªããã®PowerShellã³ãŒãã¹ãåæããŸããããçå笊ã§çµããå€æ°åãããªã䜿çšãããŠããŸããã
ããããšãã@ SteveL-MSFT-ãã®åæã®çµæãå ±æããŠããã ããŸããïŒ
ãããç§ã¯ãã®ããã€ããèŠãŠã¿ãããšæããŸãããªããªããäžéšã®ã³ãã¥ããã£ã¡ã³ããŒãç¬èªã®åæãè¡ãããã®ãããªçµæã«è¿ããã®ãäœãåŸãããªãã£ãããšãç¥ã£ãŠããããã§ãã
ãŸãã䜿çšããçµæãšæ¹æ³ãèŠãŠã¿ãããšæããŸãã æšå€ãèªåã®ãã·ã³ã§å®äºããã®ã«çŽ6æéããã£ãASTã䜿çšããŠã PowerShellã³ãŒãã¹ã®ç¬èªã®åæãè¡ããŸããã Windows Defenderããã¡ã€ã«ãæ€ç«ããŠããããã解æã§ããªããã¡ã€ã«ãå°æ°ãããŸããã
çå笊ã§çµãã8ã€ã®ãã¡ã€ã«å šäœã§11ã®äžæã®å€æ°åãèŠã€ãããŸããïŒ8846å衚瀺ããã$ïŒãé€ãïŒã 408,423åã®ãã¡ã€ã«ã«åèš1,895,983åã®äžæã®å€æ°ããããŸããã ã€ãŸããã³ãŒãã¹å ã®ãã¹ãŠã®äžæã®PowerShellå€æ°ã®0.0006ïŒ ã«ãçå笊ã§çµããå€æ°åããããŸãã
8ã€ã®ãã¡ã€ã«ãš11ã®äžæã®å€æ°ã¯æ¬¡ã®ãšããã§ãã
File : C:\Temp\PowerShellCorpus\Github\alanrenouf_PowerActions\Kill-VM.ps1
QuestionMarkVars : vParam?
QuestionMarkVarCount : 1
File : C:\Temp\PowerShellCorpus\Github\anthonywlee_PowerShell\Send_Notification.ps1
QuestionMarkVars : To?
QuestionMarkVarCount : 1
File : C:\Temp\PowerShellCorpus\Github\aspear_My-PowerCLI-scripts\my-labotomize-vms.ps1
QuestionMarkVars : vParam?
QuestionMarkVarCount : 1
File : C:\Temp\PowerShellCorpus\Github\jlundstrom_Scripts\Powershell\7Zip SFX Creator\Build.ps1
QuestionMarkVars : Title?
QuestionMarkVarCount : 1
File : C:\Temp\PowerShellCorpus\Github\pslaughter_Working\Setup-Host.ps1
QuestionMarkVars : HostIp?
QuestionMarkVarCount : 1
File : C:\Temp\PowerShellCorpus\Github\stevenayers_PowerShell-Scripts\Random Functions\Add-OutlookConferenceRegionNumber.ps1
QuestionMarkVars : {key1?, key2?, key3?, key4?}
QuestionMarkVarCount : 4
File : C:\Temp\PowerShellCorpus\Github\unixboy_powershell-stufff\stopvm.ps1
QuestionMarkVars : vParam?
QuestionMarkVarCount : 1
File : C:\Temp\PowerShellCorpus\PowerShellGallery\PsHg\0.6.2\PsHg.psm1
QuestionMarkVars : PsHg?
QuestionMarkVarCount : 1
ããã¯ãã¬ããŒãã®çæã«äœ¿çšãããã¹ã¯ãªããã§ãã
Get-ChildItem -Path C:\Temp\PowerShellCorpus -Include *.ps1, *.psm1 -File -Recurse | ForEach-Object -Parallel {
try {
$content = $PSItem | Get-Content
$ast = [System.Management.Automation.Language.Parser]::ParseInput($content, [ref]$null, [ref]$null)
$variables = $ast.FindAll({$args[0] -is [System.Management.Automation.Language.VariableExpressionAst ]}, $true)
# First query because I forgot to exclude $? variables
# $nonQuestionMark = $variables | Where-Object VariablePath -notmatch '\?$' | Select-Object -Unique
# $QuestionMark = $variables | Where-Object VariablePath -match '\?$' | Select-Object -Unique
$nonQuestionMark = $variables |
Where-Object VariablePath -notmatch '\?$' |
ForEach-Object { $_.VariablePath.UserPath.ToString() } |
Select-Object -Unique
$QuestionMark = $variables |
Where-Object { $_.VariablePath -match '\?$' -and $_.VariablePath.UserPath -ne '?' } |
ForEach-Object { $_.VariablePath.UserPath.ToString() } |
Select-Object -Unique
$output = [pscustomobject]@{
File = $PSItem
QuestionMarkVars = $QuestionMark
QuestionMarkVarCount = $QuestionMark.Count
NonQuestionMarkVars = $nonQuestionMark
NonQuestionMarkVarCount = $nonQuestionMark.Count
}
$output
}
catch {
throw
}
}
ãã®ã¬ããŒãã®çææ¹æ³ã«åé¡ãããå Žåã¯ãç¥ãããã ããã ããã¯ãç£æ»ããã¹ãããããã«äœ¿çšãããã¹ã¯ãªããã®äŸã§ãã
$abc = 'test'
$isAwesome? = $true
$?
$test = {
$?
$isabc? = { $adce? = 'test' }
${def?} = 123
${is a bad var name?} = $isabc?
}
çµæïŒ
File : C:\temp\variable.ps1
QuestionMarkVars : {isAwesome?, isabc?, adce?, def?, is a bad var name?}
QuestionMarkVarCount : 5
NonQuestionMarkVars : {abc, true, test}
NonQuestionMarkVarCount : 3
圌ããæ°åŠã®ææ¥ã§èšãããã«ããããªãã®ä»äºãèŠããŠãã ãããð
çŽ æŽãããæ¢åµã @ ThomasNieto-ããããšãã
ãã©ãŒã ${...}
ãææ¡ãããå€æŽã§åŒãç¶ãæ©èœããããšãèãããšãããã«å€ãã®ã±ãŒã¹ãæé€ã§ããå¯èœæ§ããããšæããŸããããšãã°ãå¿é
ããå¿
èŠãããã®ã¯$isAwesome?
ã§ããã ${isAwesome?}
ã§ã¯ãããŸããã
ãµã³ãã«ãã¡ã€ã«ã®å ŽåïŒ
$variables.Extent.Text.Where({ $_ -match '(?<!\$)\?$' }) | Select-Object -Unique
ç§ãã¡ã¯åŸãã ãã§ãïŒ
$isAwesome?
$isabc?
$adce?
ã€ãŸãã ${def?}
ãš${is a bad var name?}
èæ
®ããå¿
èŠã¯ãããŸããã
PSïŒã¹ã¯ãªããå
šäœãåäžã®æååãšããŠèªã¿åãã«ã¯ã $PSItem | Get-Content -Raw
ã䜿çšããæ¹ãããããè¯ãã§ãããã
@ mklement0æ£è§£ã§ããæçš¿ããçŽåã«ãããã®ã±ãŒã¹ãè¿œå ããŠãã¹ã¯ãªãããäžæ¬åŒ§è¡šèšã®å€æ°ããŸãšããŠé€å€ããªãããã«ããŸããã
æšå¥šäºé ã§ã¹ã¯ãªãããæŽæ°ããåŸããã¹ããã¡ã€ã«ã¯æåŸ ã©ããã«æ¬¡ã®åºåãçæããŸãã
File : C:\temp\variable.ps1
QuestionMarkVars : {isAwesome?, isabc?, adce?}
QuestionMarkVarCount : 3
NonQuestionMarkVars : {abc, true, test}
NonQuestionMarkVarCount : 3
ãããã®8ã€ã®ãã¡ã€ã«ã«å¯ŸããŠæŽæ°ãããã¹ã¯ãªãããå®è¡ããŸããããããããäžæ¬åŒ§è¡šèšã䜿çšããŠããªããããææ¡ãããå€æŽã«ãã£ãŠ11åã®äžæã®å€æ°ã圱é¿ãåããŸãã
æŽæ°ãããã¹ã¯ãªããïŒ
Get-ChildItem -Path C:\Temp\PowerShellCorpus -Include *.ps1, *.psm1 -File -Recurse | ForEach-Object -Parallel {
try {
$content = $PSItem | Get-Content -Raw
$ast = [System.Management.Automation.Language.Parser]::ParseInput($content, [ref]$null, [ref]$null)
$variables = $ast.FindAll({$args[0] -is [System.Management.Automation.Language.VariableExpressionAst ]}, $true)
$nonQuestionMark = $variables |
Where-Object VariablePath -notmatch '\?$' |
ForEach-Object { $_.VariablePath.UserPath.ToString() } |
Select-Object -Unique
$QuestionMark = $variables |
Where-Object { $_.VariablePath -match '\?$' -and $_.VariablePath.UserPath -ne '?' -and $_.Extent.Text -match '(?<!\$)\?$' } |
ForEach-Object { $_.VariablePath.UserPath.ToString() } |
Select-Object -Unique
$output = [pscustomobject]@{
File = $PSItem
QuestionMarkVars = $QuestionMark
QuestionMarkVarCount = $QuestionMark.Count
NonQuestionMarkVars = $nonQuestionMark
NonQuestionMarkVarCount = $nonQuestionMark.Count
}
$output
}
catch {
throw
}
}
ããããšãã @ ThomasNieto-ããŒã»ã³ããŒãžã0.0005ïŒ ãŸã§äžããããšãã§ãããšæã£ãŠããŸãã...ïŒåè«ã§ãïŒã
ããã§ãå§å¡äŒã¯å¥ã®ãã®ã䜿çšããã«éããããŸãã-ãã©ã€ããŒãïŒ -ã³ãŒãã¹ã
ãããã£ãŠãç®åã®åé¡ã決å®ããããšã«å ããŠãçåãçããŸãïŒå ¬éãããŠããã³ãŒãã¹ãæŽæ°ããå¿ èŠããããŸããïŒ æ£åŒã«ã¡ã³ããã³ã¹ãããŠããŸããïŒçŸåšã¯2017幎7æ26æ¥ä»ãïŒïŒ
@ SteveL-MSFTãæ確ã«ããŠããã ããŸããïŒ
@ mklement0åãäžããã®ã§ãå°ãã ãæ°åãè¯ããããå Žåã¯ãå®éã«ã¯0.00058ïŒ ã§ãð
https://github.com/PowerShell/PowerShell-RFC/pull/223#discussion_r318340339ã§ã @ adityapatwardhanã¯ãç§ã䜿çšããã®ãšåãå ¬éã³ãŒãã¹ã䜿çšããŠåæãè¡ãã62ïŒ ã§ãå€æ°ãçå笊ã§çµãã£ãŠããŸãã 圌ãã©ã®ããã«ããŠãã®ããŒã»ã³ããŒãžãæãã€ããã®ãã«ã€ããŠã®åå¿ã¯èŠãããŸããã§ããã PSå§å¡äŒã¯ãã®åæã䜿çšããŠãã®èŠæ±ã決å®ããŸãããïŒ
ãªã³ã¯ãããã³ã¡ã³ããèŠããšã @ adityapatwardhanãèšã£ãŠããããšã¯ã_ååã«?
ãå«ãŸãããã¹ãŠã®å€æ°ã®äžã§_ 62ïŒ
ãååã®_last_æåãšããŠ?
ãæã£ãŠããããšã ãšæããŸãã
察ç
§çã«ãïŒäžæ¬åŒ§ã®ãªãïŒ ?
å€æ°ã§çµããå®éã®æç
çã®åæïŒå
šäœçãªå€æ°äœ¿çšéã®ããŒã»ã³ããŒãžãšããŠïŒã¯ãã¯ããã«é¢é£æ§ãé«ãããã§ãã
ãã®æç¹ã§ãå§å¡äŒã¯ããããããªãããšèšã£ãŠããããã«èãããŸããããã®å ŽåãçµæãšããŠäžæ Œå¥œã§äœ¿çšãããªããªãã®ã§ããã°ããªããã®æ©èœã䜿çšããã®ã§ããããã
@ThomasNietoåæ§ã«ãç§ã¯ãããã®åé¡ã®ã©ããã§åæãè¡ããããªããšåæ§ã®çµæãåºããŸããã
@mburszleyåæããŠããã ãããããšãããããŸãã æšå¹ŽåŸãããçµæã確èªããããã«ãå¥ã®æ¹æ³ïŒast vs regexïŒã䜿çšãããã£ãã®ã§ãã
ç§ã¯ããªããèããŸãã @ mburszley ããããåïŒ
å§å¡äŒã¯ãã ãããããªãããšèšã£ãŠããã ãã§ã
ãããæ¬åœã«_ãã£ã¢ãã_ã®æ±ºå®ã§ããå ŽåïŒå®éã®äœ¿çšç¶æ³ã®åæã«åºã¥ããŠããªããã®ïŒãç¹ã«_stated_ã®çç±ããã®ãããªåæã®æ ¹æ ã§ãã£ãããšãèãããšãã³ãã¥ããã£å šäœã«ãšã£ãŠè¯ãå åã§ã¯ãããŸããã
ãããã£ãŠãå§å¡äŒã«ã決å®ã®åºç€ãšãªã£ãå®éã®äœ¿çšç¶æ³åæã瀺ãæ©äŒãäžããããåæãäžååã§ããããšãèªèããŠæ±ºå®ãåæ€èšããæ©äŒãäžããå¿ èŠããããŸãã
https://github.com/PowerShell/PowerShell/issues/11379#issuecomment-566756120ã§ã®ç§ã®ææ¡ã¯ã©ãã§ããïŒ
$obj?.Method()
<var i="12">Method</var>()
ãããã©ã«ãã§$<var i="9">obj</var>
?.
<var i="12">Method</var>()
ãã$<var i="14">obj?</var>
.
ã®ã¿ãã©ãŒã«ããã¯ããããã«ããããšããå§ãããŸã<var i="17">Method</var>()
ã$<var i="19">obj</var>
ãã¹ã³ãŒãã«ååšããªããã$<var i="21">obj?</var>
ã¯ååšãã#requires âVersion
ã¯v7 +ã§ã¯ãªãå Žåã
äžäœäºææ§ã®æžå¿µã®ã»ãšãã©ã«å¯ŸåŠã§ãããšæããŸãã
@ThomasNieto
@ mklement0ã¯æ£ããã§ããã ?
ã䜿çšããŠããå€æ°ã®ãã¡ã62ïŒ
ãæåŸã«ããã䜿çšããŠããããšãæå³ããŸããã
ããã®ã³ã¡ã³ãã«ç€ºãããŠããçµæããã ?
䜿çšãããã¹ãŠã®å€æ°ãæåŸã«ããã䜿çšããŠããããã§ãã ãããã£ãŠãé倧ãªå€æŽãå ããªããšããææ¡ã
{..}
ã®èŠä»¶ãåé€ãããå Žåã§ããã¹ã¯ãªããã¯è§£æãããŸãããã»ãã³ãã£ã¯ã¹ã¯ç°ãªããŸããããã¯ãç§ã®æèŠã§ã¯éåžžã«å±éºã§ãã
確ãã«...ããããåæã«ãããšãæåéãã»ãšãã©èª°ããããã䜿çšããŠããŸããã
ä»ã®é倧ãªå€æŽãšåãããã«ãçºè¡šãããã°ããã®éå®éšçãªæ©èœãšããŠå°å ¥ããææžåããŠå®å®ãããããšãã§ããŸãã
èå¥åæåãšããŠã®?
ãå®éã«ãªã¢ãŒãã§ããªãã®æ°ã®ã±ãŒã¹ã§äœ¿çšãããŠããªãå Žåãé£è§£ãªæ§æãæšå¥šããçç±ã¯ãããŸããã
{..}ã®èŠä»¶ãåé€ãããå Žåã§ããã¹ã¯ãªããã¯è§£æãããŸãããã»ãã³ãã£ã¯ã¹ã¯ç°ãªããŸããããã¯ãç§ã®æèŠã§ã¯éåžžã«å±éºã§ãã
ãŸããC / C ++ / CïŒã®ããã«?.
ã䜿çšããŠããŠãäœãæªãããšã瀺ããã«ééã£ãçµæãåŸãããããšãå¿é
ããŠããŸãããïŒ äŸãã°ïŒ
PS> $res = "My length is 15"
PS> $res?.Length
0
確ãã«ãstrict-modeã¯ãããèŠã€ããŸãããå€ãã®äººãstrictmodeã䜿çšããŠããããšãç§ã¯ç¥ããŸããã ãããã£ãŠãããããããªå²åã®ã¹ã¯ãªãããç Žæããã®ãé²ãããã«ã ?.
ã䜿çšããŠå€±æããå€ãã®äººã
ãèšå®ããŠããããã§ãã ç§ã¯ãã¬ãŒããªãã«å€¢äžã§ã¯ãããŸããã ãšã¯ãããããå°æ°ã®äººã§ãã人ãå£ããªãããã«ããããšããæ°æã¡ã¯ç¢ºãã«ç解ããŠããŸãã
ãããããPowerShellã«ã¯Enable-ExperimentalFeature
ãšåçã®Enable-PSFeature
ãå¿
èŠã§ããããã¯ãå®éšç¶æ
ã§ã¯ãªããªã£ãããããã©ã«ãã§ãªã³ã«å Žåã§ãã ãã®$?.GetType()
ãããªã³ãŒãã§å®è¡ãããã¹ã¯ãªããã®å Žåãå°æ¥ãããå£ãã代ããã«${?}.GetType()
ã䜿çšããå¿
èŠããããšããèŠåãçºãå§ããå¯èœæ§ããããŸãã åã
ã®ã¹ã¯ãªããã¯ã #requires -version 7.1 -feature PSNullConditionalOperators
æ©èœãæå¹ã«ããããšãã§ããŸãã ããããã°ãPS 8ãããããããã³ã«ããã®æ©èœãããã©ã«ãã§æå¹ã«ãªãå¯èœæ§ããããŸãã
@rkeithhillã®äŸã¯ã
PowerShellãä»æ¥ã©ã®ããã«æ©èœãããã«ã€ããŠç¥ã£ãŠããããšãå°ãå¿ããŠãã ããã ããªããèŠããšã
PS> $res?.Length
_nameãoperatorãname_ã®ããã«èŠããŸã-ãã¡ããããã¯ããã§ãã
ã©ã¡ããããçã«ããªã£ãŠããŸãïŒ_ "ïŒ" æŒç®åã®äžéšã§ã_ããŸãã¯_ "ïŒ" åã®äžéšã§ã-element_ïŒ
ãããã®æŒç®åãå¿
èŠãªå ŽåïŒãããŠãPowerShellyã§ã¯ãªãããšæãå ŽåïŒã誀ã£ãŠäœ¿çšããããã®ãšå°éã®ç Žæã®ã©ã¡ãããéžæããŸãã
å€æ°åã«ç¹å®ã®[æ£åœãª]æåã䜿çšããã®ã¯æªãã¹ã¿ã€ã«ã ãšèšãããã«ãpsScriptAnalyzer_now_ã«ã«ãŒã«ãå ¥ãå§ããŸãã
Enable-feature
ã¯å¥œãã§ã¯ãããŸããã 誰ãããããã¹ã¯ãªããã«å
¥ããŠã䜿ããããã®ãæ©èœãããŸããå€ãã¹ã¯ãªããã¯ãæ°ããã¹ã¯ãªããã®åŸã«å®è¡ãããšå£ããŸãïŒãã ããæ®ãã®æéã¯æ©èœããŸãïŒã Yãå³å¯ã¢ãŒãããªã³ã«ããXããªãã«äŸåããŠãããããã¹ã¯ãªããY_ãå®è¡ããåŸã«_ãµãŒãããŒãã£ã®ã¹ã¯ãªããXã倱æããã®ãèŠãŠããŸããã äž¡æ¹ã®ã¹ã¯ãªããã®äœè
ã¯ç§ã®æªãæ¬ã«ãããŸãã
å€æ°åã«ç¹å®ã®[æ£åœãª]æåã䜿çšããã®ã¯æªãã¹ã¿ã€ã«ã ãšèšãããã«ãpsScriptAnalyzerã«ã«ãŒã«ãå ¥ãå§ããŸãã
åé¡ã¯æ¬¡ã®ãšããã§ããPowerShellãå€æ°ãããŒã¯ã³åããæ¹æ³ãå€æŽãããšãPSScriptAnalyzerã§ãå€æ°ã®è¡šç€ºãç°ãªããŸãã $res?
ãããªå€æ°ãããå Žåã¯ã次ã®ããã«ãªããŸãã
{
$res?.Length
}.Ast.EndBlock.Statements[0].PipelineElements[0].Expression.Expression.VariablePath.UserPath
ããªãã«ããã
res?
ãã ããPowerShellã®è§£ææ¹æ³ã7.2ãªã©ã§å€æŽãããšã次ã®ããã«ãªããŸãã
PSScriptAnalyzer�
èªèã§ããªããªããŸãããããã¯ãå€æ°åã®äžéšã§ã¯ãªããªã£ãããã§ãïŒå®çŸ©äžããã¹ãããããšããŠããå€æŽã§ããããïŒã ããã¯ãPSScriptAnalyzerãPowerShellã¢ãžã¥ãŒã«ã§ãããPowerShellã«å梱ãããŠãããã®ãšåãããŒãµãŒãåå©çšããããã§ãã ïŒãããŠããããåå®è£
ããããšãããšãããã¯å®å
šã«ä¿å®äžå¯èœã§ãããçœå®³ã®ã¬ã·ãã«ãªããŸãïŒã
ãããåé¿ããã«ã¯ãPSScriptAnalyzerãæ¡ä»¶ä»ãã§ã³ã³ãã€ã«ããïŒãããŠãŸã£ããæ°ããã¢ã»ã³ããªãåºè·ããïŒãªã©ãæ°ãã7.2ããžãã¯ããã¹ãããŠåã蚺æãæäŸããæ¹æ³ããããŸãã ãããããã®åŸãã©ãã§ãè€éããå¢ãïŒãŸãã¯ããã¹ããµãŒãã§ã¹ãæžãïŒãããè¡šé¢çãªã·ããªãªã«å¯Ÿå¿ã§ããããã«ãªããŸããã
ããã«æªãããšã«ãASTã«äŸåããŠããä»ã®ãã¹ãŠã®ããŒã«ã«ã¯ãPSScriptAnalyzerãããã§ãããšããŠãããã®çš®ã®è€éããç¶æããèœåããããŸããã ASTã¿ãŒã²ãã£ã³ã°ããŒã«ãæ§ç¯ããŠããã»ãšãã©ã®äººã¯ãå®å šãªæ£ç¢ºãã®ããã«PowerShellã®åã ã®ãã€ããŒããŒãžã§ã³ã«å¯ŸããŠã³ã³ãã€ã«ããããšã¯ãããŸããã ç¹ã«ã©ã®ããŒãžã§ã³ã§ããšã©ãŒã§ã¯ãªãã®ã§ã圌ãã¯ãããããã®ãããªå°ããªé倧ãªå€æŽã«ã€ããŠããç¥ããªãã§ãããã ããã¯ãããè¡åãéãã«å¥ã®è¡åã«ãªããå€åãå£ãæãé°æ¹¿ãªåœ¢æ ã§ãã
ãããåºæ¬çã«ããã®ãããªããŒãµãŒ/ããŒã¯ã³ã©ã€ã¶ãŒã¬ãã«ã®å€æŽãããå±éºãªãã®ã«ããŠããçç±ã§ãã PSScriptAnalyzerã§ãããæ£ãããµãŒãã¹ãæäŸããããã«åŸæ¹ã«æ²ããå¿ èŠããããŸããã€ãŸãããã®ãããªåä»ãªå€æŽãšæ¯èŒæ€èšããå¿ èŠããããŸãã
@rjmholt ããã®ãããªå€æŽã_ååçã«_ã©ãã»ã©ããªãããŒã§ãããã¯èª°ããç解ã§ãããšæããŸããããã®ç¹å®ã®ã±ãŒã¹ã§ã¯_å®éã«ã¯_åé¡ã§ã¯ãªããPSSAã«ãŒã«ãå¿ èŠãªããšæããŸãã
@ThomasNietoã®åæã«ãããšãã³ãŒãã¹ãããã«ãããã¹ãŠã®PowerShellã³ãŒãã代衚ããŠãããšæãããå Žåãååã?
_ã§çµããå€æ°ã¯äºå®äžèª°ã䜿çšããŠããŸããã
ç§ãæšæž¬ãããšãã»ãšãã©ã®äººã¯ãã®ãããªå€æ°åã䜿çšããããšãã_èããŸãã_ããªããªãã圌ãã¯ããããæ©èœããããšãæåŸ
ããªãããã§ãïŒç§ãå«ãïŒããããŠããããèªå$?
ãšããäŸå€ã«æ°ä»ããªãã§ãããbash
ãªã©ã®POSIXäºæã·ã§ã«ã§ãåæ§ã«äŸå€ã§ãïŒã
8
ãã¡ã€ã«ã®äžã§æ¬¡ã®ããšãããããŸãã5
ã¯_falsepositives_ã®ã¿ãå«ãŸããŸããã€ãŸããå€æ°ã¯"Are you sure you want to kill $vParam?"
ãªã©ã®_strings_å
ã§äœ¿çšãããŸã-å®éããããã®äœ¿çšã¯_å£ãã_ã§ãããã¹ã¯ãªããã®äœæè
ã?
ãæåŸ
ããŠããªãã£ãããšã瀺ããŠããŸãå€æ°åã®äžéšã2
ã¯å
¬éãããªããªããŸããã?
-$key1?
ïŒãšããŠèª å®ã«äœ¿çšããŠãããããäœè«ã§ãããã¡ã³ããŒã¢ã¯ã»ã¹æŒç®åãšã¯_çµåãããŠããŸãã_ ã .
/ cc @ stevenayersãäžèšã«åºã¥ããŠãããã¯æç§æžã®ãã±ãã3ïŒããããããªãç°è²ã®é åã®å€æŽãšããŠç§ã襲ããŸãããããã£ãŠãããã¯_蚱容å¯èœ_ã§ã-ãããŠãã®å€æŽã®_å©ç¹_ã¯èª¬åŸåãæã£ãŠè°è«ãããŠãããšæããŸãã
è¡åã®å€åãïŒçè«çæ ¹æ ãšãšãã«ïŒ_ææžå_ããã ãã§ååã§ãã
ãã¡ããïŒ
ããã¯ãïŒaïŒåæãæ£ããããšãããã³ïŒbïŒå ¬éãããŠããã³ãŒãã¹ã代衚çã§ããããšãåæãšããŠããŸãã
ãçå笊ã§çµããå€æ°åãããªã䜿çšãããŠããããšããå§å¡äŒã®äž»åŒµãšã¯ãŸã£ããçžå®¹ããŸããïŒãã¡ããããã®ãããªå€æ°åã{...}
å²ãŸããŠããªãå Žåã«ã®ã¿åé¡ã«ãªããŸãã
1.ãçã§ããïŒ2.ããµããŒããããã®ã¯äœãèããŠããªãïŒãšããä»®å®ã«åºã¥ããŠé²ãããšã2ã€ã®éžæè¢ããããŸãã
{...}
å²ãŸããŠããªãéãïŒ $?
é€ããŠïŒããã³ããšã€ããåãé€ããŠãå€æ°åã®?
ãåçŽã«çŠæ¢ããŸã-ããã¯æ¶ããŠããå°ããªãã®ãå£ããŸãçŸåšããã«äŸåããŠããã¹ã¯ãªããã®å²åã
$key1?
ããã«ããã®åŸã«.
ããå¥ã®?
ïŒ $key1??'else'
ïŒãã3é
åŒïŒ $key1?1:0
ïŒãç¶ããŸããã _parsererror_ãçºçããŸãã$key1 ?1:0
/ $key1 ??'else'
-ãŸãã¯{...}
- ${key1}?1:0
/ ${key1}??'else'
?
ã¯ïŒ {...}
å²ãŸããŠããªãïŒå€æ°åã®äžéšãšã¯èŠãªãããªããªããããå®éã«ã¯ã "Are you sure you want to kill $vParam?"
ãªã©ã®æååã誀ã£ãŠäœ¿çšããæ¢åã®ã¹ã¯ãªããã_ä¿®æ£_ããŸãã æ¢åã®ã¹ã¯ãªããã®ããããããªéšåãå£ããªãããã«ããå¿ èŠããããšæ¬åœã«æããå Žåã¯ã@ ExE-Bossã«ãã£ãŠææ¡ãããããžãã¯ãæ€èšããããšã¯ã§ããŸãããå®è£ ã®è€éãã¯èšããŸã§ããªãããã®æŠå¿µã®è€éããå°å ¥ããããšã¯æããŸããïŒç§ã¯æ¬åœã«è©±ãããšã¯ã§ããŸããïŒã
@ SteveL-MSFT
9æã®ã³ãã¥ããã£ã³ãŒã«ïŒhttps://aka.ms/PSCommunityCall;ãã®èšäºã®å·çæç¹ã§ã¯ã9æã®ã³ãŒã«ã®é²é³ã¯ããã«æçš¿ãããŠããŸããããhttpsïŒ//aka.ms/JoinPSCallããã¢ã¯ã»ã¹ã§ããŸãã次ã®é»è©±ãŸã§ïŒã46ïŒ00ããã https ïŒ @ThomasNietoã®ææ¡ã«åºã¥ããŠããŸãã
ïŒã¬ã³ãŒãã£ã³ã°ã®é¢é£éšåãžã®çŽæ¥ãªã³ã¯ãæäŸããããšæã£ãŠããŸããããYouTubeã«æçš¿ãããhttpsïŒ//aka.ms/PSCommunityCallã«ãªã³ã¯ããããŸã§åŸ ã€å¿ èŠããããŸããïŒ
é²é³ã§ã®ããªãã®çºèšã«åºã¥ããŠïŒ
ãããåæ€èšããææã瀺ããå Žåã¯ããã®åé¡ãå床éããŠã Review - Committee
ã¿ã°ãä»ãçŽããŠãã ããã
å€æ°åãäžæ¬åŒ§ã§å²ãããšã¯æ¢åã®æ©èœã§ããããã®å Žåã¯_çŸç_çç±ã§å€æ°åã䜿çšããå¿ èŠãããããšã«å察ããŠãããšããããªãã®æèŠã«ã€ããŠã¯ã次ã®ããã«ãªããŸãã
{...}
ã§ããå Žåã«ãã£ãŠã¯äœ¿çšããªããã°ãªããªãããšã«æ°ä»ããŠããªããšæããŸãã{...}
ã䜿çšããå¿
èŠããªãããã_éãã«å€±æãã_æ¹æ³ã§_æåŸ
ãããåäœãåŸãããªã_ããšã§ãã äºæ¬¡çãªæžå¿µã¯ãå
¥åã®äžäŸ¿ã§ããGitHubPowerShellãšã³ã·ã¹ãã ã®èšèšå€æŽãšæ¹åã«é¢ããã³ãã¥ããã£ãã£ãŒãããã¯ã®RFCïŒRequest for CommentsïŒããã¥ã¡ã³ã-PowerShell / PowerShell-RFC
Microsoft Teams
ãã®åé¡ïŒçŸåšã¯ç¡æéã«éããç¶æ ã«ãªã£ãŠããããã«èŠããŸãïŒãã²ã³å²ãã«é¥ãã®ã§ã¯ãªãããšå¿é ããŠããã®ã§ãå蚪ããããã®ãªãã€ã³ããŒãšããŠïŒ14025ãéããŸãããèå³ã®ããæ¹ã¯ããã²ãæ¯æŽãã ããã
æãåèã«ãªãã³ã¡ã³ã
@rjmholt ããã®ãããªå€æŽã_ååçã«_ã©ãã»ã©ããªãããŒã§ãããã¯èª°ããç解ã§ãããšæããŸããããã®ç¹å®ã®ã±ãŒã¹ã§ã¯_å®éã«ã¯_åé¡ã§ã¯ãªããPSSAã«ãŒã«ãå¿ èŠãªããšæããŸãã
@ThomasNietoã®åæã«ãããšãã³ãŒãã¹ãããã«ãããã¹ãŠã®PowerShellã³ãŒãã代衚ããŠãããšæãããå Žåãååã
?
_ã§çµããå€æ°ã¯äºå®äžèª°ã䜿çšããŠããŸãããç§ãæšæž¬ãããšãã»ãšãã©ã®äººã¯ãã®ãããªå€æ°åã䜿çšããããšãã_èããŸãã_ããªããªãã圌ãã¯ããããæ©èœããããšãæåŸ ããªãããã§ãïŒç§ãå«ãïŒããããŠããããèªå
$?
ãšããäŸå€ã«æ°ä»ããªãã§ãããbash
ãªã©ã®POSIXäºæã·ã§ã«ã§ãåæ§ã«äŸå€ã§ãïŒã8
ãã¡ã€ã«ã®äžã§æ¬¡ã®ããšãããããŸãã5
ã¯_falsepositives_ã®ã¿ãå«ãŸããŸããã€ãŸããå€æ°ã¯"Are you sure you want to kill $vParam?"
ãªã©ã®_strings_å ã§äœ¿çšãããŸã-å®éããããã®äœ¿çšã¯_å£ãã_ã§ãããã¹ã¯ãªããã®äœæè ã?
ãæåŸ ããŠããªãã£ãããšã瀺ããŠããŸãå€æ°åã®äžéšã2
ã¯å ¬éãããªããªããŸããã?
-$key1?
ïŒãšããŠèª å®ã«äœ¿çšããŠãããããäœè«ã§ãããã¡ã³ããŒã¢ã¯ã»ã¹æŒç®åãšã¯_çµåãããŠããŸãã_ ã.
/ cc @ stevenayersãäžèšã«åºã¥ããŠãããã¯æç§æžã®ãã±ãã3ïŒããããããªãç°è²ã®é åã®å€æŽãšããŠç§ã襲ããŸãããããã£ãŠãããã¯_蚱容å¯èœ_ã§ã-ãããŠãã®å€æŽã®_å©ç¹_ã¯èª¬åŸåãæã£ãŠè°è«ãããŠãããšæããŸãã
è¡åã®å€åãïŒçè«çæ ¹æ ãšãšãã«ïŒ_ææžå_ããã ãã§ååã§ãã
ãã¡ããïŒ
ããã¯ãïŒaïŒåæãæ£ããããšãããã³ïŒbïŒå ¬éãããŠããã³ãŒãã¹ã代衚çã§ããããšãåæãšããŠããŸãã
ãçå笊ã§çµããå€æ°åãããªã䜿çšãããŠããããšããå§å¡äŒã®äž»åŒµãšã¯ãŸã£ããçžå®¹ããŸããïŒãã¡ããããã®ãããªå€æ°åã
{...}
å²ãŸããŠããªãå Žåã«ã®ã¿åé¡ã«ãªããŸãã1.ãçã§ããïŒ2.ããµããŒããããã®ã¯äœãèããŠããªãïŒãšããä»®å®ã«åºã¥ããŠé²ãããšã2ã€ã®éžæè¢ããããŸãã
{...}
å²ãŸããŠããªãéãïŒ$?
é€ããŠïŒããã³ããšã€ããåãé€ããŠãå€æ°åã®?
ãåçŽã«çŠæ¢ããŸã-ããã¯æ¶ããŠããå°ããªãã®ãå£ããŸãçŸåšããã«äŸåããŠããã¹ã¯ãªããã®å²åã$key1?
ããã«ããã®åŸã«.
ããå¥ã®?
ïŒ$key1??'else'
ïŒãã3é åŒïŒ$key1?1:0
ïŒãç¶ããŸããã _parsererror_ãçºçããŸãã$key1 ?1:0
/$key1 ??'else'
-ãŸãã¯{...}
-${key1}?1:0
/${key1}??'else'
?
ã¯ïŒ{...}
å²ãŸããŠããªãïŒå€æ°åã®äžéšãšã¯èŠãªãããªããªããããå®éã«ã¯ã"Are you sure you want to kill $vParam?"
ãªã©ã®æååã誀ã£ãŠäœ¿çšããæ¢åã®ã¹ã¯ãªããã_ä¿®æ£_ããŸããæ¢åã®ã¹ã¯ãªããã®ããããããªéšåãå£ããªãããã«ããå¿ èŠããããšæ¬åœã«æããå Žåã¯ã@ ExE-Bossã«ãã£ãŠææ¡ãããããžãã¯ãæ€èšããããšã¯ã§ããŸãããå®è£ ã®è€éãã¯èšããŸã§ããªãããã®æŠå¿µã®è€éããå°å ¥ããããšã¯æããŸããïŒç§ã¯æ¬åœã«è©±ãããšã¯ã§ããŸããïŒã