MS_PowerShell - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
-
TOP > ã€ã³ãã©ã¹ãã©ã¯ã㣠> ã·ã§ã«
- CMD
- PowerShell
- Windows Terminal
- Azureã®ã·ã§ã«
-
ã¹ã¯ãªããã£ã³ã°
- BAT
- VBScript
- PythonïŒPython on WindowsïŒ
PowerShell ã®ãããã¯ãçºããŠããŸãã
ïŒPowerShell ãªããžã§ã¯ãããŒã¹ã®ã·ã§ã«ïŒ
ãã€ãã§æµããã®ãããã¹ãã§ã¯ãªã .NET ãªããžã§ã¯ãã§ããç¹ãã
UNIX ç³»ã·ã§ã«ãšã®æå€§ã®éãã
åç³»åã§ãããã眮ãæãã
å¥ç©ãšããŠäœ¿çšïŒäœµçšïŒããå¿ èŠãããã
- äŸãã°ã
-
ipconfigãªã©ã®ã³ãã³ããå®è¡ãããšãããªãã¿ã®åºåã衚瀺ãããã -
netshãªã©ã®ã³ãã³ããå®è¡ããŠèšå®ãããããã¯PowerShellã§å®è¡å¯èœã
-
- ãã ããCmd.exeã眮ãæãããã®ã§ã¯ãªãã
- æšæºåºåãããã¹ããšããŠãã€ãã§ããªãã
- BATã®æ§æã䜿çšã§ããªãã
ç§»è¡ã¡ã¢: ãæšæºåºåãããã¹ããšããŠãã€ãã§ããªããã¯ã PowerShell ã³ãã³ãã¬ããéã®è©±ã å€éš EXE ã®æšæºåºåã¯æååãšããŠæ±ãããããã
ipconfig | Select-String "IPv4"ã®ãããªããã¹ãåŠçèªäœã¯å¯èœã ããªããžã§ã¯ããåæãªã®ã§ãããã¹ãåæã® CMD ã¹ã¯ãªããã¯ãã®ãŸãŸæµçšã§ããªãã
ãšããè¶£æšãšè§£ãããã
.NET Coreãããã§ããããã€ã®éã«ããLinuxã§ãå©çšå¯èœã«ãªã£ãŠãŸããã
- åè
PowerShell ã®åããŒãžã§ã³ã¯ã以äžã®OSã«æ·»ä»ãããŠããããå¥éããŠã³ããŒãã§ããŸãã
- æ°ããOSã»ã©ãæ°ããPowerShellã«å¯Ÿå¿ããŸãã
- ãŸããæ§OSã§ã¯ãæ°ããPowerShellã®ãµããŒãããããŸããã
- PowerShellã®ããŒãžã§ã³ã«äŸåããããªå Žåã¯ã察象ãšããOSãäœã確èªãã ããã
- ãã€ã®éã«ãã7.1ã«ãªã£ãŠãâŠã
- æœããMSIã§ã€ã³ã¹ããŒã«ïŒWindowsïŒ
è£è¶³ïŒææ°åïŒ: çŸåšã¯ PowerShell 7.xïŒæ§ç§° PowerShell CoreïŒã ã¯ãã¹ãã©ãããã©ãŒã çã®ç³»çµ±ã§ã
pwsh.exeãšããŠã Windows 忢±ã® Windows PowerShell 5.1ïŒpowershell.exeïŒãšã¯ 䜵åã€ã³ã¹ããŒã«ãããïŒçœ®ãæãã§ã¯ãªãïŒã Windows PowerShell 5.1 ã¯æ©èœè¿œå ãåçµãããã»ãã¥ãªãã£ä¿®æ£ã®ã¿ã ã€ã³ã¹ããŒã«ã¯winget install Microsoft.PowerShellãæè»œã
- åè
- Azure PowerShellã®ã€ã³ã¹ããŒã«ïŒAzure PowerShellïŒ
- Windows ãžã® PowerShell ã®ã€ã³ã¹ããŒã« - Microsoft Learn
- GitHub - PowerShell/PowerShell
ãããã·ã®èšå®æ¹æ³ãåç §ã
ã€ã³ã¿ã©ã¯ãã£ããªé次å®è¡ã¯ã
- ã¹ã¿ãŒãã¡ãã¥ãŒãã PowerShell ã³ãã³ãããã³ãããéããŠãã
- ã³ãã³ãããã³ãããã
PowerShell.exeãå®è¡ããŠãã
ã©ã¡ãã®æ¹æ³ã§ã PowerShell ãæã§ïŒã·ã§ã«ãšããŠïŒé次å®è¡ã§ããŸãã
â» .ps1 ã¹ã¯ãªããã®å®è¡ã«ã¯å®è¡ããªã·ãŒãé¢ããã
æ¢å®ïŒWindows ã¯ã©ã€ã¢ã³ã㯠RestrictedïŒã§ã¯ã¹ã¯ãªãããå®è¡ã§ããªãããã
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned ãªã©ã®èšå®ãå¿
èŠã
Get-XXXXXã³ãã³ãã®åºåã¯ä»¥äžã®ãããªãã€ãã§ãã©ãŒãããå¯èœã
Get-XXXXX | Format-Wide
Get-XXXXX | Format-List
Get-XXXXX | Format-Tableâ» Format-* ãéããšä»¥éã¯ãªããžã§ã¯ãã§ã¯ãªãæŽåœ¢çšãªããžã§ã¯ãã«ãªãããã
ãã€ãã©ã€ã³ã®æåŸã§äœ¿ãããšã
倿°ã¯ $ ã§å§ãŸãè±æ°åèšå·ã®ååã䜿çšããŸãã
åŸè¿°ã®æ§ã«ã¹ã³ãŒãïŒ$global:, $script:ïŒãã€ããããšãåºæ¥ãŸãã
äžã®æ§ã« ${ } ã§å²ããšãååã«ã¹ããŒã¹ãå«ãããšãã§ããŸããã
æ··ä¹±ãã¹ãã«ãã¹ã®å
ã«ãªããããã®ã§é¿ããŸãããã
PS E:\temp> ${var test 1} = 123
PS E:\temp> $a = ${var test 1} + "123"
PS E:\temp> $a
246
ç§»è¡ã¡ã¢ïŒæ£èª€ïŒ: åæã¯ãã®äŸã®åºåã
246ãšããŠãããã123ïŒæ°å€ïŒ+"123"ïŒæååïŒã¯ã巊蟺ã®åã«åãããPowerShell ã®èŠåã«ãã å³èŸºãæ°å€ã«å€æããã246ã«ãªããããã¯åæã©ããæ£ããã ïŒéã«"123" + 123ãªãæååé£çµã§123123ã«ãªããïŒ
æªåæåã®åæç¶æ
㯠$null ãšåãã§ããæèã«ãã£ãŠã¯ 0 ã ""ïŒç©ºæååïŒãšè§£éãããŸãã
PS E:\temp> $var001
PS E:\temp> $var001 -eq 0
False
PS E:\temp> $var001 -eq $null
True
PS E:\temp> $a1 = $var001 + 2
PS E:\temp> $a1
2
PS E:\temp> $a1 = $var001 + "abc"
PS E:\temp> $a1
abc
äžã®äŸã§ã¯ã倿° $var001 ã¯æªåæåãªã®ã§ã$null ãšåãã§ãã
倿°ããã®ãŸãŸåºåãããšã$null ã¯äœã衚瀺ãããŸããã
ãŸãã-eq æ¯èŒæŒç®åã䜿ã£ãŠã0 ã $null ãšæ¯èŒãããšã$null ã§ããããšã倿ã§ããŸãã
æªåæå倿°ã¯ãæ°å€ãè¶³ãç®ããå Žå㯠0 ããæååãé£çµããå Žå㯠"" ããããããä»®å®ãããŸãã
Set-StrictMode ã䜿çšãããšãæªåæå倿°ãåç
§ããéã«ãšã©ãŒãšããŠæ€åºã§ããŸãã
PS E:\temp> Set-StrictMode -Version 1.0
PS E:\temp> $a1 = $var001 + 2
倿° '$var001' ã¯ãèšå®ãããŠããªãããã«ååŸã§ããŸããã
PowerShellã®å€æ°ã¯ã倿°ã䜿çšããå Žæãã¹ã³ãŒãã®ç¯å²ã«ãªããŸãã
- function ã®äž
- PowerShell ã¢ãžã¥ãŒã«ã®äž
-
.ps1ã¹ã¯ãªããã®äžïŒPowerShellã®PS1ãã¡ã€ã«ã®äœæãšå®è¡ïŒ
ãªã©ãã¹ã³ãŒãã®å¢çã«ãªããŸãã
ifæã¯ãäžã®æ§ã« - ã§å§ãŸãæ¯èŒæŒç®åã䜿ããŸãã
$var1 = sub2 $arg1 $arg2
if ( ( $var1 -eq 1 ) -or ( $var1 -gt 10 ) ) {
...
}æ¡ä»¶ã®ANDãORã¯ãããããã ( ... ) ã§å²ãã§ -and ã -or ã§çµã³ãŸãã
ãããæŒç®ã¯ã-band ã -bor ã® -b ã§å§ãŸãæŒç®åã䜿ããŸãã
$file = Get-Item $dirname
if ( $file.Attributes -band [System.IO.FileAttributes]::Directory ) {
...
}bitæŒç®çµæã0以å€ã®å Žåã¯ãçãšã¿ãªãããŸãã
ifæã®æŒç®åã®è©³çްã¯ãget-help about_Comparison_Operators ãåç
§ããŠãã ããã
é åã¯ã以äžã®åœ¢åŒã§å®çŸ©ã§ããŸãã
$array1 = @()
$array2 = @(1,2,3)
$array3 = 1,2,3( ) ã§å²ãŸãªããŠããã,ãã§äžŠã¹ããšãé
åã«ãªããŸãã
ã³ãã³ãã颿°ãžã®åŒæ°ãã,ãã§åºåã£ãå Žåãé
åã«ãªãã®ã§ãæžãééãã«æ³šæã
$ret1 = sub1 2,3,4 # ãã㯠@(2,3,4) ã®é
åã§åŒæ°ïŒã€
$ret2 = sub1 2 3 4 # ããã¯ åŒæ°ïŒã€
$ret3 = sub1 2,3 4 # ãã㯠@(2,3)ã®é
åïŒã€ãš æ°å€4 ã® åŒæ°ïŒã€ãŸããé
åã®æ·»ãå㯠$倿°å[æ·»ãå] ã§åç
§ããŸãã
æ·»ãåã«è² æ°ãæå®ãããšãé
åã®æ«å°Ÿããã®æ·»ãåãæå®ã§ããŸãã
$var1 = $array2[1] # äžã® $array2 ãã 2 ãåãåºã
$var2 = $array2[-1] # äžã® $array2 ãã 3 ãåãåºãé
åã«ã€ããŠè©³ããã¯ãget-help about_array ãåç
§ãã ããã
- PSSnapin ãš Module
- PowerShellã®PS1ãã¡ã€ã«ã®äœæãšå®è¡
- PowerShell Cmdletã®äœãæ¹
- PowerShell ãããã€ããšãã©ã€ã
ã³ãã³ããæ¢ãã«ã¯ãã³ãã³ãåã®äžéšã * ã§çç¥ã㊠Get-Command ãå®è¡ããŸãã
Get-Command *event- ã³ãã³ãã®èª¬æãåŒæ°ã®æ§æã確èªããã«ã¯ã
get-helpã䜿ããŸãã
get-help get-childitem- ãã«ãã®æç« ã online ããååŸããæ§ã«ãªã£ãŠããããšããããŸãã
- å¿
èŠã«å¿ããŠ
get-help ã³ãã³ã -onlineã®ããã«ãããã -
Update-Helpã§ããŒã«ã«ã®ãã«ããååŸããã
- å¿
èŠã«å¿ããŠ
ãªããžã§ã¯ãã®ã¡ã³ããŒãããããã£ã確èªããã«ã¯ã
ã³ãã³ãã®åºåããã€ãã§ Get-Member ã«æž¡ããŸãã
Get-ChildItem | Get-MemberGet-WmiObject -Listè£è¶³ïŒææ°åïŒ:
Get-WmiObject㯠PowerShell 6 以éã§åé€ãããã åŸç¶ã¯ CIM ã³ãã³ãã¬ããïŒGet-CimInstance/Get-CimClassïŒã§ã WinRM ããŒã¹ã®ãããªã¢ãŒãå®è¡ãšã®çžæ§ãè¯ãã äŸïŒGet-CimInstance Win32_NetworkAdapter
.ps1 ãã¡ã€ã«ã®äžã§ãšã©ãŒãçºçãããšãæ¢å®ã§ã¯ã
èµ€æåã§ãšã©ãŒè¡šç€ºãããŠããã®ãŸãŸæ¬¡ã®è¡ãå®è¡ãããŸãã
ãšã©ãŒãåŠçããã«ã¯ãäžã®ãããããå¿
èŠã§ãã
Trap {
ãšã©ãŒåŠç
}
ã³ãã³ã .... -ErrorAction "stop"$ErrorActionPreference = "stop"
try {
ã³ãã³ã ....
} catch [Exception] {
ãšã©ãŒåŠç
}è£è¶³: PowerShell ã®ãšã©ãŒã«ã¯ çµäºãšã©ãŒãšéçµäºãšã©ãŒãããã
try/catchã§æãŸããããã®ã¯çµäºãšã©ãŒã®ã¿ã ã³ãã³ãã¬ããã®éçµäºãšã©ãŒãæãŸããã«ã¯-ErrorAction Stopãå¿ é ã ãªã å€éš EXE ã®å€±æã¯äŸå€ã«ãªããªãã®ã§ã$LASTEXITCODEã確èªãã ïŒPowerShell 7.3 以éã¯$PSNativeCommandUseErrorActionPreferenceã§å€æŽå¯èœïŒã
debugã¯ãdebugçšprintæããããã°çšç°å¢ãã䜿ã£ãŠãããã°ã§ããŸãã
Write-Host ã³ãã³ããã¹ã¯ãªããã®äžã«åãèŸŒãæ¹æ³ã§ãã
ïŒWrite-Output ã¯é¢æ°ã®åºåã«ãªãã®ã§ãdebugçšã«ã¯äœ¿ããªãã§ãã ãããïŒ
â» çŸåšã¯ Write-DebugïŒ-Debug æå®æã®ã¿åºåïŒã
Write-VerboseïŒ-Verbose æå®æã®ã¿åºåïŒã䜿ãã»ãããåŸå§æ«ãèŠããªãã
PowerShell ISE (Integrated Scripting Environment) ç°å¢ã䜿çšã§ããŸãã
ãã¬ãŒã¯ãã€ã³ãã®èšå®ãã¹ãããå®è¡ããã¡ãã¥ãŒæäœã§è¡ããŸãã
è£è¶³ïŒææ°åïŒ: PowerShell ISE 㯠Windows PowerShell 5.1 å°çšã§ã PowerShell 7 ã§ã¯åäœããªãïŒæ°æ©èœéçºãçµäºïŒã çŸåšã®æšæºã¯ Visual Studio Code + PowerShell æ¡åŒµã
éåžžã® PowerShell ã³ãã³ãããã³ããã®ãŸãŸã§ãã
Set-PSBreakpoint çã® debugçšã®ã³ãã³ãã䜿çšããŠã1è¡ãã€ã¹ãããå®è¡ããããšãåºæ¥ãŸãã
PS E:\temp> Set-PSBreakpoint -command .\ps_scope1.ps1
ID Script Line Command Variable Action
-- ------ ---- ------- -------- ------
0 .\ps_scope1.ps1
PS E:\temp> .\ps_scope1.ps1
ãããã° ã¢ãŒããéå§ããŸãããã«ãã衚瀺ããã«ã¯ãh ãŸã㯠? ã䜿çšããŠãã ããã
ããã '.\ps_scope1.ps1' ã®ã³ãã³ãã®ãã¬ãŒã¯ãã€ã³ã
[DBG]: PS E:\temp>>> s
ps_scope1.ps1:2 $global:g1 = "0"
[DBG]: PS E:\temp>>> s
ps_scope1.ps1:3 $script:s1 = "0"
- 倿°ã倿Žããããšãã«åæ¢ããããã«ãã¬ãŒã¯ãã€ã³ããèšå®ããããšãã§ããŸã
ïŒSet-PSBreakpoint -VariableïŒã - 詳现ã¯
about_Debuggersãåç §ã
Windows Server 2012以éã¯ç®¡çã³ã³ãœãŒã«ã®è£ã¯PowerShellã³ãã³ãã¬ããã«ãªãã
- çŸè¡ã管çã³ã³ãœãŒã«ã¯CUI â WMIã§æ§æãããŠããã
- ã³ãã³ãã¬ããã®è£ã¯.NETããã®è£ã¯WMIïŒWindows Management InstrumentationïŒã
- MSçã«ã¯ãä»åŸPowerShellæŒãã
- ã³ãã³ãã¬ããã¯
<æäœ>-<ã¿ãŒã²ãã>ã®åç§°ã«ãŒã«ã«æºæ ã - WSHïŒVBSãšJSïŒã¯åçµãããã
- BATã¯ä»åŸããšã³ãã³ã¹æãã
- PowerShellããBATããWSHãå®è¡å¯èœã
- ãŸããGet-WmiObjectïŒçŸåšã¯
Get-CimInstanceïŒã§WMIãå®è¡å¯èœã - é£ããäºããããªãããŸã WMIãå¿ èŠã
- ã³ãã³ãã¬ããã¯
- Windows Management Framework 3.0 ã§æšæºåïŒ
PowerShell â WS-Management â CIMOMãSMI-SïŒWS-Management 以äžããä»ã®PFã管çã§ããïŒ- Windows PowerShell 3.0
- WinRM
- WMIïŒã¢ããããŒãïŒ
- Windows PowerShell Web ServiceïŒWPWSïŒ
- Server Manager CIM Provider
ç§»è¡ã¡ã¢ïŒæ£èª€ïŒ: åæã®ã管çã³ã³ãœãŒã«ã¯CUI â WMI ã§æ§æãããŠãããã¯ã GUIïŒç®¡çã³ã³ãœãŒã«ïŒâ PowerShell ã³ãã³ãã¬ãã â WMI/CIM ãšããç©ã¿äžãã®æã Windows Server 2012 以éã®ãµãŒããŒãããŒãžã£ãŒã¯ã GUI æäœã®å®äœãšããŠã³ãã³ãã¬ãããåŒã³åºãæ§é ã«ãªã£ãŠããã
ïŒPowerShellããªã¢ãŒãã³ã³ãã¥ãŒã¿ãŒã§å®è¡ïŒ
Invoke-Command -ComputerName ãã·ã³å -ScriptBlock { ã»ã»ã»ã³ãŒãã»ã»ã» }
Invoke-Command -Session $s -FilePath ãã¡ã€ã«ãã¹â» Session ãæå®ããã°åŠçäžã®ãžã§ãçã«åæ¥ç¶ããããšãå¯èœã
Start-Job -ScriptBlock { ã»ã»ã»ã³ãŒãã»ã»ã» }
Start-Job -FilePath ãã¡ã€ã«ãã¹â» çµæã¯Sessionã®ç¯å²ã§ããæå¹ã§ã¯ç¡ãã
- ãã¡ã€ã«ãšããŠç»é²
- ã¯ã©ã€ã¢ã³ãã§ããµãŒãã§ãå®è¡ã§ããã
- ãµãŒãã忢ããŠãåŠçãã¬ãžã¥ãŒã ã§ãããéåæãžã§ããšç°ãªããçµæã¯æ°žç¶åãããŠããã
- ãã®ä»ã䞊ååŠççãå¯èœã
è£è¶³ïŒææ°åïŒ: PowerShell Workflow 㯠PowerShell 6 以éã§ã¯æªãµããŒã ïŒWindows Workflow Foundation ã .NET Core ã«ç§»æ€ãããªãã£ãããïŒã 䞊ååŠçã¯
ForEach-Object -ParallelïŒPowerShell 7 以éïŒã æ°žç¶çãªãžã§ã㯠Azure Automation ãªã©ã§ä»£æ¿ããã
PowerShellã®åŸ¡èã§ãæšä»ãCUIã ãã§çµæ§ã€ã±ã説ã
- ãšã€ãªã¢ã¹ã䜿ã£ãŠUnix颚ã«ã§ããã
- Windows Server 2012 ãã GUI ã®ã¢ã³ã€ã³ã¹ããŒã«ãå¯èœã§ããµãŒãã³ã¢é¢šã«éçšå¯èœã
- PowerShell - Wikipedia
- PowerShell Documentation - Microsoft Learn
- PowerShell äœ¿ãæ¹ã¡ã¢ - Qiita
Tags: ã·ã§ã«, ã€ã³ãã©ã¹ãã©ã¯ãã£, Windows, Linux