ããã«ã¡ã¯ãäœæ°ïŒ PowerShellã¯ãã¹ã¯ãªããèšèªã§ãããšåæã«ãã»ãŒãã¹ãŠã®ã¿ã¹ã¯ã管çããã³èªååã§ããã³ãã³ãã·ã§ã«ã§ãã PowerShell for Sysadminsã§ã¯ãMicrosoftMVPã®ææè
ã§ããAdamBertramïŒå¥åãAutomatorãïŒãPowerShellã®äœ¿ç𿹿³ã瀺ããèªè
ãã€ãã«ããã¡ãããšã¬ãç«ã®æéãæãŠãããã«ããŸããæ¬¡ã®ããšãåŠç¿ããŸãã-ã³ãã³ãã®çµã¿åãããå®è¡ãããŒã®å¶åŸ¡ããšã©ãŒã®åŠçãã¹ã¯ãªããã®èšè¿°ããªã¢ãŒãã§ã®å®è¡ãããã³Pesterãã¹ããã¬ãŒã ã¯ãŒã¯ã䜿çšãããã¹ãã -XMLãJSONãªã©ã®æ§é åããŒã¿ãåæããäžè¬çãªãµãŒãã¹ïŒActive DirectoryãAzureãAmazon Web Servicesãªã©ïŒãšé£æºããŠããµãŒããŒç£èŠã·ã¹ãã ãäœæããŸãã -PowerShellã¢ãžã¥ãŒã«ãäœæããã³èšèšããŸãã -䟿å©ãªPowerShellã䜿çšããŸããå®å
šã«èªååãããWindowsã€ã³ã¹ããŒã«ã -Hyper-Vãã¹ããšããã€ãã®ISOãã¡ã€ã«ã®ã¿ã䜿çšããŠActiveDirectoryãã©ã¬ã¹ããäœæããŸãã -ã»ãã®æ°è¡ã®ã³ãŒãã§ç¡æ°ã®WebãµãŒããŒãšSQLãµãŒããŒãäœæããŠãã ããïŒå®éã®äŸã¯ãçè«ãšå®éã®ã·ã¹ãã ã§ã®äœæ¥ãšã®éã®ã®ã£ãããåããã®ã«åœ¹ç«ã¡ãèè
ã®è»œããŠãŒã¢ã¢ã¯èªã¿ãããããŸããé«äŸ¡ãªãœãããŠã§ã¢ããŠã§ãããã®æŒ ç¶ãšããã¢ããã€ã¹ã«é Œãã®ã¯ãããŸãããïŒ
ãã®æ¬ã¯èª°ã®ããã®ãã®ã§ãã
- , . DevOps, , / (CI/CD).
, PowerShell . PowerShell « Windows» â Microsoft, PowerShell . , , .
, PowerShell . PowerShell « Windows» â Microsoft, PowerShell . , , .
å¶åŸ¡ãããŒ
å°ãç¹°ãè¿ããŸãããã第3ç« ã§ã¯ããã€ãã©ã€ã³ãšå€éšã¹ã¯ãªããã䜿çšããŠã³ãã³ããçµã¿åãããæ¹æ³ãåŠã³ãŸããã第2ç« ã§ã¯ã倿°ãšããããã䜿çšããŠå€ãæ ŒçŽããæ¹æ³ã«ã€ããŠèª¬æããŸããã倿°ãæäœããäž»ãªå©ç¹ã®1ã€ã¯ã倿°ã䜿çšããŠãå€ã§ã¯ãªããæå³ãã䜿çšããŠæ©èœããã³ãŒããèšè¿°ã§ããããšã§ããããšãã°ãæ°å€3ã䜿çšãã代ããã«ã$ serverCountã®äžè¬çãªæŠå¿µã䜿çšããŸããããã«ããããµãŒããŒã1å°ã2å°ããŸãã¯1,000å°ã®å Žåã§ãåãããã«æ©èœããã³ãŒããèšè¿°ã§ããŸãããã®æ©èœãšãããŸããŸãªã³ã³ãã¥ãŒã¿ãŒã§å®è¡ã§ããã¹ã¯ãªããã«ã³ãŒããä¿åããæ©èœãçµã¿åããããšãã¯ããã«å€§èŠæš¡ãªåé¡ã®è§£æ±ºãéå§ã§ããŸãã
ãã ããå®éã«ã¯ã1å°ã®ãµãŒããŒã§äœæ¥ãããã2å°ã§äœæ¥ãããã1000å°ã§äœæ¥ããããéèŠã«ãªãããšããããŸãããããŸã§ã®ãšãããããã説æããé©åãªæ¹æ³ã¯ãªããã¹ã¯ãªããã¯äžããäžã«å®è¡ãããã ãã§ãç¹å®ã®å€ã«åºã¥ããŠé©å¿ããããšã¯ã§ããŸããããã®ç« ã§ã¯ãå¶åŸ¡ãããŒãšæ¡ä»¶ä»ãããžãã¯ã䜿çšããŠãæäœããå€ã«å¿ããŠç°ãªãã³ãã³ããå®è¡ããã¹ã¯ãªãããèšè¿°ããŸãããã®ç« ã®çµãããŸã§ã«ãif / thenãšswitchã¹ããŒãã¡ã³ããããã³ããŸããŸãªã«ãŒãã䜿çšããŠãã³ãŒãã«éåžžã«å¿ èŠãªæè»æ§ãäžããæ¹æ³ãåŠç¿ããŸãã
å¶åŸ¡ãããŒã«ã€ããŠå°ã
è€æ°ã®ãªã¢ãŒãã³ã³ãã¥ãŒã¿ãŒã«ä¿åãããŠãããã¡ã€ã«ã®å 容ãèªã¿åãã¹ã¯ãªãããäœæããŸããç¶è¡ããã«ã¯ãgithub.com / adbertram / PowerShellForSysadmins /ã«ããæ¬ã®è³æããApp_configuration.txtãšãããã¡ã€ã«ãããŠã³ããŒãããè€æ°ã®ãªã¢ãŒãã³ã³ãã¥ãŒã¿ãŒã®CïŒ\ãã©ã€ãã®ã«ãŒãã«é 眮ããŸãããªã¢ãŒãã³ã³ãã¥ãŒã¿ããæã¡ã§ãªãå Žåã¯ãä»ã®ãšããèªã¿ç¶ããŠãã ããããã®äŸã§ã¯ãSRV1ãSRV2ãSRV3ãSRV4ãããã³SRV5ãšããååã®ãµãŒããŒã䜿çšããŸãã
ãã¡ã€ã«ã®ã³ã³ãã³ãã«ã¢ã¯ã»ã¹ããã«ã¯ãGet-Contentã³ãã³ãã䜿çšããæ¬¡ã«ç€ºãããã«ãPathãã©ã¡ãŒã¿ãŒåŒæ°ã®å€ã«ãã¡ã€ã«ãžã®ãã¹ãæå®ããŸããGet-Content-Path
"\\ servername \ c $ \ App_configuration.txt ãã
ãŸãããµãŒããŒã®ãã¹ãŠã®ååãé åã«ä¿åãããµãŒããŒããšã«ãã®ã³ãã³ããå®è¡ããŸããããæ°ãã.ps1ãã¡ã€ã«ãéãããªã¹ã4.1ã®ã³ãŒãããã®ãã¡ã€ã«ã«å ¥åããŸãã
ãªã¹ã4.1ãè€æ°ã®ãµãŒããŒãããã¡ã€ã«ã³ã³ãã³ããæœåºãã
$servers = @('SRV1','SRV2','SRV3','SRV4','SRV5')
Get-Content -Path "\\$($servers[0])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[1])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[2])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[3])\c$\App_configuration.txt"
Get-Content -Path "\\$($servers[4])\c$\App_configuration.txt"
çè«çã«ã¯ããã®ã³ãŒãã¯åé¡ãªãæ©èœããã¯ãã§ãããã ãããã®äŸã§ã¯ãåé¡ãçºçããŠããããšãåæãšããŠããŸããSRV2ãµãŒããŒãããŠã³ããå Žåã¯ã©ããªããŸããïŒèª°ããApp_configuration.txtãSRV4ã«é 眮ããã®ãå¿ããå Žåã¯ã©ããªããŸããïŒãŸãã¯ã誰ãããã¡ã€ã«ãã¹ã倿Žããå¯èœæ§ããããŸããïŒãµãŒããŒããšã«åå¥ã®ã¹ã¯ãªãããäœæã§ããŸããããã®ãœãªã¥ãŒã·ã§ã³ã¯ãç¹ã«ãµãŒããŒã®è¿œå ãéå§ãããšãã«æ¡åŒµã§ããŸãããç¶æ³ã«å¿ããŠæ©èœããã³ãŒããå¿ èŠã§ãã
å¶åŸ¡ãããŒã®èåŸã«ããèãæ¹ã¯ãäºåå®çŸ©ãããããžãã¯ã«åºã¥ããŠããŸããŸãªåœä»€ã»ãããå®è¡ã§ããããã«ããããšã§ããã¹ã¯ãªãããç¹å®ã®ãã¹ã«æ²¿ã£ãŠå®è¡ããããšæ³åããŠãã ããããããŸã§ã®ãšãããã³ãŒãã®æåã®è¡ããæåŸã®è¡ãŸã§ã®ãã¹ã¯åçŽã§ãããã ããéäžã§ãã©ãŒã¯ã远å ããããæ¢ã«èšªããå Žæã«æ»ã£ããããžã£ã³ããããããããšã¯ã§ããŸããã¹ã¯ãªããã®å®è¡ãã¹ããã©ãŒã¯ããããšã§ãã¹ã¯ãªããã®æè»æ§ãé«ãŸãã1ã€ã®ã¹ã¯ãªããã§å€ãã®ç¶æ³ãåŠçã§ããããã«ãªããŸãã
ãŸããæãåçŽãªã¿ã€ãã®å¶åŸ¡ãããŒã§ããæ¡ä»¶ã¹ããŒãã¡ã³ããèŠãŠãããŸãã
æ¡ä»¶æã®äœ¿çš
第2ç« ã§ã¯ãçãšåœã®è«çå€ãããããšãåŠã³ãŸãããããŒã«å€ã䜿çšãããšãåŒïŒæ¡ä»¶ãšåŒã°ããïŒãTrueãŸãã¯Falseã®ã©ã¡ãã«è©äŸ¡ããããã«å¿ããŠãç¹å®ã®ã³ãŒããããã¯ãå®è¡ããããã«PowerShellã«æç€ºããæ¡ä»¶ã¹ããŒãã¡ã³ããäœæã§ããŸããæ¡ä»¶ã¯ã€ãšã¹/ããŒã®è³ªåã§ãã 5å°ä»¥äžã®ãµãŒããŒããããŸããïŒãµãŒããŒ3ã¯å®è¡ãããŠããŸããïŒãã¡ã€ã«ãã¹ã¯ååšããŸããïŒæ¡ä»¶æã®äœ¿çšãéå§ããããã«ããã®ãããªè³ªåãåŒã«å€æããæ¹æ³ãèŠãŠã¿ãŸãããã
æŒç®åãšåŒã®æ§ç¯ããªãã¯
å€ãæ¯èŒæ¯èŒæŒç®åã䜿çšããŠè«çåŒãæžãããšãã§ããŸããæ¯èŒæŒç®åã䜿çšããã«ã¯ã次ã®ããã«2ã€ã®å€ã®éã«é 眮ããå¿ èŠããããŸãã
PS> 1 âeq 1 True
ãã®å ŽåãâeqæŒç®åã䜿çšãããšã2ã€ã®å€ã®åçæ§ãå€å¥ã§ããŸãã
以äžã¯ã䜿çšããæãäžè¬çãªæ¯èŒæŒç®åã®ãªã¹ãã§ãïŒ
-eqã¯2ã€ã®å€ãæ¯èŒããããããçããå Žåã¯Trueãè¿ããŸãã
-neã¯2ã€ã®å€ãæ¯èŒããçãããªãå Žåã¯Trueãè¿ããŸãã
-gtã¯2ã€ã®å€ãæ¯èŒããæåã®å€ã2çªç®ã®å€ãã倧ããå Žåã¯Trueãè¿ããŸãã
-geã¯2ã€ã®å€ãæ¯èŒããæåã®å€ã2çªç®ã®å€ä»¥äžã®å Žåã«Trueãè¿ããŸãã
-ltã¯2ã€ã®å€ãæ¯èŒããæåã®å€ã2çªç®ã®å€ãããå°ããå Žåã¯Trueãè¿ããŸãã
-leã¯2ã€ã®å€ãæ¯èŒããæåã®å€ã2çªç®ã®å€ä»¥äžã®å Žåã«Trueãè¿ããŸãã
-containsã¯ã2çªç®ã®å€ãæåã®å€ã®äžéšã§ããå Žåã«Trueãè¿ããŸããããšãã°ããã®æŒç®åã䜿çšãããšãå€ãé åå ã«ãããã©ãããå€å¥ã§ããŸãã
PowerShellã«ã¯ãããé«åºŠãªæ¯èŒæŒç®åããããŸããããã§ã¯è©³ãã説æããŸããããMicrosoftã®ããã¥ã¡ã³ãïŒdocs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_comparison_operatorsïŒãŸãã¯PowerShellãã«ãã»ã¯ã·ã§ã³ã§ãããã«ã€ããŠèªãããšããå§ãããŸãã ïŒç¬¬1ç« ãåç §ïŒã
äžèšã®æŒç®åã䜿çšããŠã倿°ãšå€ãæ¯èŒã§ããŸããããããåŒã¯æ¯èŒã§ããå¿ èŠã¯ãããŸãããPowerShellã³ãã³ããæ¡ä»¶ãšããŠäœ¿çšã§ããå ŽåããããŸããåã®äŸã§ã¯ããµãŒããŒã®å¯çšæ§ãç¥ããããšæããŸãããTest-Connectionã³ãã³ãã¬ããã䜿çšããŠããµãŒããŒãžã®æ¥ç¶ããã¹ãã§ããŸããéåžžãTest-Connectionã³ãã³ãã¬ããã®åºåã«ã¯ããŸããŸãªæ å ±ãå«ãŸããŠããŸãããQuietãã©ã¡ãŒã¿ãŒã䜿çšãããšãã³ãã³ãã«TrueãŸãã¯Falseãè¿ãããã«åŒ·å¶ã§ããCountãã©ã¡ãŒã¿ãŒã§ãã¹ãã1åã®è©Šè¡ã«å¶éã§ããŸãã
PS> Test-Connection -ComputerName offlineserver -Quiet -Count 1 False
PS> Test-Connection -ComputerName onlineserver -Quiet -Count 1 True
ãµãŒããŒãããŠã³ããŠãããã©ããã確èªããã«ã¯ãânotæŒç®åã䜿çšããŠåŒãéã«ããŸãã
PS> -not (Test-Connection -ComputerName offlineserver -Quiet -Count 1) True
åºæ¬çãªåŒã«æ £ããŠããã®ã§ãæãåçŽãªæ¡ä»¶æŒç®åãèŠãŠã¿ãŸãããã
ifã¹ããŒãã¡ã³ã
ifã¹ããŒãã¡ã³ãã¯åçŽã«æ©èœããŸããXãtrueã®å ŽåãYãå®è¡ããŸããããã§å®äºã§ãã
åŒã§ã¹ããŒãã¡ã³ãã䜿çšããã«ã¯ãifããŒã¯ãŒãã®åŸã«ââãæ¡ä»¶ãå«ãæ¬åŒ§ãèšè¿°ããŸããåŒã®åŸã«ã¯ãäžæ¬åŒ§ã§å²ãŸããã³ãŒãã®ãããã¯ãç¶ããŸãã PowerShellã¯ãåŒãTrueãšè©äŸ¡ãããå Žåã«ã®ã¿ããã®ã³ãŒããããã¯ãå®è¡ããŸãã ifåŒãFalseãšè©äŸ¡ãããããäœãè¿ããªãå Žåãã³ãŒããããã¯ã¯å®è¡ãããŸããã if / thenã¹ããŒãã¡ã³ãã®æ§æããªã¹ã4.2ã«ç€ºããŸãã
ãªã¹ã4.2ã Ifã¹ããŒãã¡ã³ãã®æ§æ
if () {
# ,
}
ãã®äŸã«ã¯ãå°ãæ°ããæ§æããããŸããããã·ã¥ïŒïŒïŒæåã¯ã³ã¡ã³ãã瀺ããŸãâããã¯PowerShellãç¡èŠããããã¹ãã§ããã³ã¡ã³ãã䜿çšããŠãèªåèªèº«ãŸãã¯åŸã§ã³ãŒããèªãä»ã®äººã«åœ¹ç«ã€ã¡ã¢ã説æãæ®ãããšãã§ããŸãã
次ã«ããªã¹ã4.1ã«ç€ºãã³ãŒããããäžåºŠèŠãŠã¿ãŸããããæ»ãã ãµãŒããŒã«å°éããããšããªãããã«ifã¹ããŒãã¡ã³ãã䜿çšããæ¹æ³ã説æããŸããåã®ã»ã¯ã·ã§ã³ã§ãTest-Connectionã³ãã³ããTrueãŸãã¯Falseãè¿ãåŒãšããŠäœ¿çšã§ããããšã¯ãã§ã«èª¬æããŸãããããã§ã¯ãTest-Connectionãifã¹ããŒãã¡ã³ãã§ã©ããããŠãããGet-Contentã³ãã³ãã䜿çšããŠã¢ã¯ã»ã¹ãåé¿ããŸããããæ»ãã ãµãŒããŒ....ä»ã®ãšããããªã¹ã4.3ã«ç€ºãããã«ãæåã®ãµãŒããŒã®ã³ãŒãã®ã¿ã倿ŽããŸãã
ãªã¹ã4.3ã ifã¹ããŒãã¡ã³ãã䜿çšããŠéžæçã«ã¢ã¯ã»ã¹ãã
$servers = @('SRV1','SRV2','SRV3','SRV4','SRV5')
if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
Get-Content -Path "\\$($servers[0])\c$\App_configuration.txt"
}
Get-Content -Path "\\$($servers[1])\c$\App_configuration.txt"
----
ifã¹ããŒãã¡ã³ãã«Get-Contentãå«ãŸããŠãããããå£ãããµãŒããŒã«ã¢ã¯ã»ã¹ããããšããŠããšã©ãŒãçºçããããšã¯ãããŸããããã¹ãã倱æããå Žåãã¹ã¯ãªããã¯ãã¡ã€ã«ãèªã¿åãããšããªãããšãèªèããŠããŸããã³ãŒãã¯ããµãŒããŒãæå¹ã«ãªã£ãŠããããšãæ¢ã«èªèããŠããå Žåã«ã®ã¿ããµãŒããŒãžã®ã¢ã¯ã»ã¹ã詊ã¿ãŸãããã ãããã®ã³ãŒãã¯ãæ¡ä»¶ãçã®å Žåã«ã®ã¿èµ·åããããšã«æ³šæããŠãã ãããå€ãã®å Žåãçã®æ¡ä»¶ã«å¯ŸããŠ1ã€ã®ã¹ã¯ãªããåäœãæå®ããåœã®æ¡ä»¶ã«å¯ŸããŠå¥ã®ã¹ã¯ãªããåäœãæå®ããå¿ èŠããããŸããæ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãelseã¹ããŒãã¡ã³ãã䜿çšããŠfalseæ¡ä»¶ã®åäœãå®çŸ©ããæ¹æ³ã説æããŸãã
ä»ã®ã¹ããŒãã¡ã³ã
ifã¹ããŒãã¡ã³ãã«ä»£æ¿ãæäŸããã«ã¯ãifãããã¯ã®éãæ¬åŒ§ã®åŸã«elseããŒã¯ãŒãã䜿çšãããã®åŸã«ã³ãŒããããã¯ãå«ãäžæ¬åŒ§ã®å¥ã®ãã¢ãç¶ããããšãã§ããŸãããªã¹ã4.4ã«ç€ºãããã«ãæåã®ãµãŒããŒãå¿çããªãå Žåã¯ãelseã¹ããŒãã¡ã³ãã䜿çšããŠã³ã³ãœãŒã«ã«ãšã©ãŒãè¿ããŸãã
ãªã¹ã4.4ãæ¡ä»¶ã
çã§ãªã å Žåã«elseå¥ã䜿çšããŠã³ãŒããå®è¡ãã
if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
Get-Content -Path "\\$($servers[0])\c$\App_configuration.txt"
} else {
Write-Error -Message "The server $($servers[0]) is not responding!"
}
if / elseã¹ããŒãã¡ã³ãã¯ãçžäºã«æä»çãª2ã€ã®ç¶æ³ãããå Žåã«ããŸãæ©èœããŸãããã®å ŽåããµãŒããŒã¯æ¥ç¶ãããŠãããã©ããã«é¢ä¿ãªããã€ãŸããã³ãŒãã®2ã€ã®ãã©ã³ãã®ã¿ãå¿ èŠã§ããããè€éãªç¶æ³ã«å¯ŸåŠããæ¹æ³ãèŠãŠã¿ãŸãããã
Elseifã¹ããŒãã¡ã³ã
elseã¹ããŒãã¡ã³ãã¯ãéã®ç¶æ³ãã«ããŒããŠããŸããæ©èœããªãå Žåã¯ããšã«ããå®è¡ããŠãã ããããã®ã¢ãããŒãã¯ããã€ããªæ¡ä»¶ãã€ãŸããµãŒããŒãå®è¡ãããŠãããã©ããã«é¢ä¿ãªãæ©èœããŸãããã ããå Žåã«ãã£ãŠã¯ã倿°ã®ãªãã·ã§ã³ãåŠçããå¿ èŠããããŸããããšãã°ãå¿ èŠãªãã¡ã€ã«ããªããµãŒããŒãããããã®ãµãŒããŒã®ååã$ problemServer倿°ã«æ ŒçŽããŠãããšããŸãïŒãã®ã³ãŒãè¡ãã¹ã¯ãªããã«è¿œå ããŠãã ããïŒïŒãããã¯ãçŸåšããŒãªã³ã°ããŠãããµãŒããŒãåé¡ã®ãããµãŒããŒã§ãããã©ããã確èªããããã«ã远å ã®ãã§ãã¯ãå¿ èŠã§ããããšãæå³ããŸããããã¯ã以äžã®ã³ãŒãã«ç€ºãããã«ããã¹ããããifã¹ããŒãã¡ã³ãã䜿çšããŠå®è¡ã§ããŸãã
if (Test-Connection -ComputerName $servers[0] -Quiet -Count 1) {
if ($servers[0] âeq $problemServer) {
Write-Error -Message "The server $servers[0] does not have the right
file!"
} else {
Get-Content -Path "\\$servers[0]\c$\App_configuration.txt"
}
} else {
Write-Error -Message "The server $servers[0] is not responding!"
}
----
ãã ããelseifã¹ããŒãã¡ã³ãã䜿çšããŠåãããžãã¯ãå®è£ ããããã®ããé©åãªæ¹æ³ããããŸããããã«ãããelseãããã¯ã«æ»ãåã«è¿œå ã®æ¡ä»¶ã確èªã§ããŸãã elseifãããã¯ã®æ§æã¯ãifãããã¯ã®æ§æãšåãã§ãããããã£ãŠãelseifã¹ããŒãã¡ã³ãã䜿çšããŠåé¡ã®ãããµãŒããŒããã¹ãããã«ã¯ããªã¹ã4.5ã®ã³ãŒããå®è¡ããŸãã
ãªã¹ã4.5ã elseifãããã¯ã®äœ¿çš
if (-not (Test-Connection -ComputerName $servers[0] -Quiet -Count 1)) { ï
Write-Error -Message "The server $servers[0] is not responding!"
} elseif ($servers[0] âeq $problemServer) ï
Write-Error -Message "The server $servers[0] does not have the right file!"
} else {
Get-Content -Path "\\$servers[0]\c$\App_configuration.txt" ï
}
----
elseifã¹ããŒãã¡ã³ãã远å ããã ãã§ãªããåæã«ã³ãŒãã®ããžãã¯ã倿Žããããšã«æ³šæããŠãã ããã ânotæŒç®åã䜿çšããŠããµãŒããŒããªãã©ã€ã³ãã©ããã確èªã§ããããã«ãªããŸãããæ¬¡ã«ããµãŒããŒã®ãããã¯ãŒã¯ã¹ããŒã¿ã¹ãç¹å®ããããåé¡ããªããã©ããã確èªããŸããããã§ãªãå Žåã¯ãelseã¹ããŒãã¡ã³ãã䜿çšããŠããã©ã«ãã®ãã¡ã€ã«ãã§ãã¯ã¢ãŠãåäœãããªã¬ãŒããŸããã芧ã®ãšããããã®æ¹æ³ã§ã³ãŒããæ§é åããæ¹æ³ã¯ããã€ããããŸããéèŠãªããšã¯ãã³ãŒããæ©èœããååãåããŠèŠãå Žåã§ããèªåã§ã³ãŒããæžããåŸã§ããå€éšã®äººãèªã¿åããããšã§ãã
ããŸããŸãªç¶æ³ã«å¯Ÿå¿ããããã«ãelseifã¹ããŒãã¡ã³ããããã€ã§ãé£éãããããšãã§ããŸãããã ããelseifã¹ããŒãã¡ã³ãã¯çžäºã«æä»çã§ããelseifã®1ã€ãTrueãšè©äŸ¡ããããšãPowerShellã¯ãã®ã³ãŒãã®ã¿ãå®è¡ããä»ã®ã±ãŒã¹ããã§ãã¯ããŸããããªã¹ã4.5ã§ã¯ããã«ã¹ããã§ãã¯ããåŸã«ãµãŒããŒã®ãåé¡ãããã¹ãããã ãã§ãããããããã«ãã£ãŠåé¡ãçºçããããšã¯ãããŸããã§ããããå°æ¥çã«ã¯ãã®æ©èœã念é ã«çœ®ãããšããå§ãããŸãã
ifãelseãelseifã¹ããŒãã¡ã³ãã¯ãåçŽãªyes / no質åã«å¯Ÿããã³ãŒãå¿çãå®è£ ããã®ã«æé©ã§ããæ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãããè€éãªããžãã¯ãæäœããæ¹æ³ãåŠç¿ããŸãã
Switchã¹ããŒãã¡ã³ã
äŸãå°ã調æŽããŠã¿ãŸãããã 5ã€ã®ãµãŒããŒããããåãµãŒããŒã§å¿ èŠãªãã¡ã€ã«ãžã®ãã¹ãç°ãªããšããŸããçŸåšããã£ãŠããããšã«åºã¥ããŠããµãŒããŒããšã«åå¥ã®elseifã¹ããŒãã¡ã³ããäœæããå¿ èŠããããŸããããã¯æ©èœããŸããããã䟿å©ãªæ¹æ³ããããŸãã
çŸåšãå¥ã®ã¿ã€ãã®æ¡ä»¶ã§äœæ¥ããŠããããšã«æ³šæããŠãã ããã以åã«ãã¯ã/ãããããªã©ã®è³ªåãžã®åçãå¿ èŠã ã£ãå Žåãä»ã¯1ã€ã®ããšã®å ·äœçãªæå³ãååŸããããšæããŸãã SRV1ãµãŒããŒã§ããïŒ SRV2ïŒçã 1ã€ãŸãã¯2ã€ã®ç¹å®ã®å€ã®ã¿ãæäœããŠããå Žåã¯ãifã¹ããŒãã¡ã³ããæ©èœããŸããããã®å Žåãswitchã¹ããŒãã¡ã³ãã®æ¹ãã¯ããã«ããŸãæ©èœããŸãã
switchã¹ããŒãã¡ã³ãã䜿çšãããšãå€ã«å¿ããŠããŸããŸãªã³ãŒããå®è¡ã§ããŸããããã¯ãswitchããŒã¯ãŒããšããã«ç¶ãæ¬åŒ§ã§å²ãŸããåŒã§æ§æãããŸãããªã¹ã4.6ã«ç€ºãããã«ãswitchãããã¯å ã«ã¯ã次ã®ããã«æ§æãããäžé£ã®ã¹ããŒãã¡ã³ãããããŸããæåã«å€ãæå®ããæ¬¡ã«ã³ãŒããããã¯ãå«ãäžæ¬åŒ§ã®ã»ãããæåŸã«ããã©ã«ããããã¯ãæå®ããŸãã
ãªã¹ã4.6ã Switchã¹ããŒãã¡ã³ããã³ãã¬ãŒã
switch () {
{
#
}
{
}
default {
# ,
}
}
switchã¹ããŒãã¡ã³ãã«ã¯ãã»ãŒç¡å¶éã®æ°ã®å€ãå«ããããšãã§ããŸããåŒãå€ã«è©äŸ¡ããããšããããã¯å ã®å¯Ÿå¿ããã³ãŒããå®è¡ãããŸããéèŠãªããšã¯ãelseifãšã¯ç°ãªããã³ãŒãã®1ã€ã®ãããã¯ãå®è¡ããåŸãPowerShellã¯ãç¹ã«æèšãããŠããªãéããæ®ãã®æ¡ä»¶ãåŒãç¶ããã§ãã¯ããããšã§ãããããã®å€ãäžèŽããªãå ŽåãPowerShellã¯ããã©ã«ãã®ãããã¯ã§ã³ãŒããå®è¡ããŸãããªã¹ã4.7ã«ç€ºãããã«ãswitchã¹ããŒãã¡ã³ãã®æ¡ä»¶ã®å埩ã忢ããã«ã¯ãã³ãŒããããã¯ã®æåŸã§breakããŒã¯ãŒãã䜿çšããŸãã
ãªã¹ã4.7ã switchã¹ããŒãã¡ã³ãã§breakããŒã¯ãŒãã䜿çšãã
switch () {
{
#
break
}
----
breakããŒã¯ãŒãã䜿çšãããšãswitchã¹ããŒãã¡ã³ãã®æ¡ä»¶ãçžäºã«æä»çã«ããããšãã§ããŸãã 5ã€ã®ãµãŒããŒãšããã¹ãç°ãªãåããã¡ã€ã«ã䜿çšããäŸã«æ»ããŸãããã䜿çšããŠãããµãŒããŒã¯1ã€ã®å€ããæãŠãªãïŒã€ãŸããSRV1ãšSRV2ã®äž¡æ¹ã«åæã«ååãä»ããããšã¯ã§ããªãïŒããšãç¥ã£ãŠããã®ã§ãbreakã¹ããŒãã¡ã³ãã䜿çšããå¿ èŠããããŸããã¹ã¯ãªããã¯ããªã¹ã4.8ã«ç€ºããããªãã®ã«ãªããŸãã
ãªã¹ã4.8ã switchã¹ããŒãã¡ã³ãã§ããŸããŸãªãµãŒããŒããã§ãã¯ãã
$currentServer = $servers[0]
switch ($currentServer) {
$servers[0] {
# Check if server is online and get content at SRV1 path.
break
}
$servers[1] {
## Check if server is online and get content at SRV2 path.
break
}
$servers[2] {
## Check if server is online and get content at SRV3 path.
break
}
----
ãã®ã³ãŒãã¯ãifã¹ããŒãã¡ã³ããšelseifã¹ããŒãã¡ã³ãã®ã¿ã䜿çšããŠæžãçŽãããšãã§ããŸãïŒããã詊ããŠã¿ãããšã匷ããå§ãããŸãïŒïŒããããã®å Žåããã©ã¡ãã®æ¹æ³ãéžæããŠãããªã¹ãå ã®ãã¹ãŠã®ãµãŒããŒã«åãæ§é ãå¿ èŠã§ããã€ãŸããã·ããªãªã¯éåžžã«é·ããªããŸãã5å°ã§ã¯ãªã500å°ã®ãµãŒããŒããã¹ãããããšãæ³åããŠã¿ãŠãã ãããæ¬¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãæãåºæ¬çãªå¶åŸ¡ãããŒæ§é ã®1ã€ã§ããã«ãŒãã䜿çšããŠãã®åé¡ãåãé€ãæ¹æ³ãåŠç¿ããŸãã
ã«ãŒãã®äœ¿çš
ã³ã³ãã¥ãŒã¿ãŒäœæ¥ã«ã¯å€§ãŸããªç®å®ããããŸããç¹°ãè¿ããŠã¯ãããŸããïŒDRYïŒãåãä»äºãããŠããããšã«æ°ä»ããå Žåã¯ããããèªååããæ¹æ³ãããå¯èœæ§ããããŸããã³ãŒãã£ã³ã°ã§ãåãã§ããåãè¡ãäœåºŠã䜿çšããå Žåã¯ãããããããè¯ã解決çããããŸãã
ç¹°ãè¿ããåé¿ãã1ã€ã®æ¹æ³ã¯ãã«ãŒãã䜿çšããããšã§ããã«ãŒãã䜿çšãããšãæå®ããæ¡ä»¶ã倿ŽããããŸã§ã³ãŒããç¹°ãè¿ãå®è¡ã§ããŸãã忢æ¡ä»¶ã¯ãããŒã«å€ã倿ŽããããŸã§ããŸãã¯ã«ãŒããç¡æéã«å®è¡ããããã«å®çŸ©ãããŸã§ãæå®ãããåæ°ã ãã«ãŒããéå§ã§ããŸããã«ãŒãã®åãã¹ãå埩ãšåŒã³ãŸãã
PowerShellã«ã¯ãforeachãforãdo / whileãdo / untilãwhileã®5çš®é¡ã®ã«ãŒãããããŸãããã®ã»ã¯ã·ã§ã³ã§ã¯ãåã¿ã€ãã®ã«ãŒãã«ã€ããŠèª¬æãããããã®åºæã®æ©èœã匷調ãããããã䜿çšããã®ã«æé©ãªç¶æ³ã匷調ããŸãã
èè ã«ã€ããŠ
AdamBertramã¯ã20幎ã®çµéšãæã€çµéšè±å¯ãªITããã³ã€ã³ã¿ãŒãããããžãã¹ã®å°éå®¶ã§ããèµ·æ¥å®¶ãITã€ã³ãã«ãšã³ãµãŒãMicrosoft MVPãBloggerããã¬ãŒãã³ã°ãããŒãžã£ãŒãã³ã³ãã³ãããŒã±ãã£ã³ã°ã®äœæè ã§ãããå€ãã®ITäŒæ¥ãšååããŠããŸãã Adamã¯ãŸããITãããã§ãã·ã§ãã«ã®ã¹ãã«ãéçºããããã®äººæ°ã®ããTechSnipsãã©ãããã©ãŒã ïŒtechsnips.ioïŒãèšç«ããŸããã
ãã®æ¬ã®è©³çްã«ã€ããŠã¯ãåºç瀟 ã®Webãµã€ããã芧ãã ãã
» ç®æ¬¡
» æç²
Habitorsã«ã€ããŠã¯ãã¯ãŒãã³25ïŒ å²åŒ- PowerShellã®
æžç±ã®çŽã®ããŒãžã§ã³ã®æ¯æãã®éã«ã¯ãé»åæžç±ã¯ãé»åã¡ãŒã«ã«éä¿¡ãããŸãã