UNIX系コマンドとPowerShellコマンドレット
macOSやLinuxなどUNIX系コマンドに馴れている場合、UNIX系コマンドに対応するコマンドレットを知る方法が手っ取り早い学習方法になるかもしれない。
PowerShell Coreのソースコードには次の対応データも掲載されており、最初にPowerShell Coreのコマンドがどういうものになっているのかを知るにはよい資料だろう。
UNIX系コマンド | PowerShellコマンド | PowerShellエイリアス |
---|---|---|
ls | Get-ChildItem | dir, gci |
tree | Get-ChildItem -Rescure | dir |
cd | Set-Location | cd |
pwd | Get-Location | pwd, gl |
clear | Clear-Host | clear |
mkdir | New-Item -ItemType Directory | ni |
touch | New-Item -Path | ni |
cat | Get-Content | type, gc |
cp | Copy-Item | copy, cpi |
cp -r | Copy-Item src dst -Recurse | copy, cpi |
mv | Move-Item | move, mi |
rm | Remove-Item | del, erase, rd, ri |
rm -r | Remove-Item dir -Recurse | del, erase, rd, ri |
find . -name キー | Get-ChildItem キー -Recurse | dir, gci |
grep -Rin キー —include=”*.拡張子” * | Get-ChildItem -Recurse -Filter *拡張子 | Select-String -Pattern キー | dir, gci, sls |
PowerShell Coreはオープンソースソフトウェアでクロスプラットフォームなのだが、コマンドレッドや関数、エイリアス、アプリケーションは環境によってその数が異なるので、必ずしも同じものが実行できるとは限らない。
例えば、Windows 10で動作するPowerShell Coreには次のコマンドレットが存在する。
Windows 10 PowerShell Core 6.0.2コマンドレット一覧 |
---|
Add-Content, Add-History, Add-Member, Add-Type, Clear-Content, Clear-History, Clear-Item, Clear-ItemProperty, Clear-Variable, Compare-Object, Connect-PSSession, Connect-WSMan, ConvertFrom-Csv, ConvertFrom-Json, ConvertFrom-SecureString, ConvertFrom-StringData, Convert-Path, ConvertTo-Csv, ConvertTo-Html, ConvertTo-Json, ConvertTo-SecureString, ConvertTo-Xml, Copy-Item, Copy-ItemProperty, Debug-Job, Debug-Process, Debug-Runspace, Disable-PSBreakpoint, Disable-PSRemoting, Disable-PSSessionConfiguration, Disable-RunspaceDebug, Disable-WSManCredSSP, Disconnect-PSSession, Disconnect-WSMan, Enable-PSBreakpoint, Enable-PSRemoting, Enable-PSSessionConfiguration, Enable-RunspaceDebug, Enable-WSManCredSSP, Enter-PSHostProcess, Enter-PSSession, Exit-PSHostProcess, Exit-PSSession, Export-Alias, Export-BinaryMiLog, Export-Clixml, Export-Csv, Export-FormatData, Export-ModuleMember, Export-PSSession, Find-Package, Find-PackageProvider, ForEach-Object, Format-Custom, Format-Hex, Format-List, Format-Table, Format-Wide, Get-Acl, Get-Alias, Get-AuthenticodeSignature, Get-ChildItem, Get-CimAssociatedInstance, Get-CimClass, Get-CimInstance, Get-CimSession, Get-CmsMessage, Get-Command, Get-ComputerInfo, Get-Content, Get-Credential, Get-Culture, Get-Date, Get-Event, Get-EventSubscriber, Get-ExecutionPolicy, Get-FileHash, Get-FormatData, Get-Help, Get-History, Get-Host, Get-Item, Get-ItemProperty, Get-ItemPropertyValue, Get-Job, Get-Location, Get-Member, Get-Module, Get-Package, Get-PackageProvider, Get-PackageSource, Get-PfxCertificate, Get-Process, Get-PSBreakpoint, Get-PSCallStack, Get-PSDrive, Get-PSHostProcessInfo, Get-PSProvider, Get-PSReadlineKeyHandler, Get-PSReadlineOption, Get-PSSession, Get-PSSessionCapability, Get-PSSessionConfiguration, Get-Random, Get-Runspace, Get-RunspaceDebug, Get-Service, Get-TimeZone, Get-TraceSource, Get-TypeData, Get-UICulture, Get-Unique, Get-Uptime, Get-Variable, Get-Verb, Get-WinEvent, Get-WSManCredSSP, Get-WSManInstance, Group-Object, Import-Alias, Import-BinaryMiLog, Import-Clixml, Import-Csv, Import-LocalizedData, Import-Module, Import-PackageProvider, Import-PowerShellDataFile, Import-PSSession, Install-Package, Install-PackageProvider, Invoke-CimMethod, Invoke-Command, Invoke-Expression, Invoke-History, Invoke-Item, Invoke-RestMethod, Invoke-WebRequest, Invoke-WSManAction, Join-Path, Measure-Command, Measure-Object, Move-Item, Move-ItemProperty, New-Alias, New-CimInstance, New-CimSession, New-CimSessionOption, New-Event, New-FileCatalog, New-Guid, New-Item, New-ItemProperty, New-Module, New-ModuleManifest, New-Object, New-PSDrive, New-PSRoleCapabilityFile, New-PSSession, New-PSSessionConfigurationFile, New-PSSessionOption, New-PSTransportOption, New-Service, New-TemporaryFile, New-TimeSpan, New-Variable, New-WinEvent, New-WSManInstance, New-WSManSessionOption, Out-Default, Out-File, Out-Host, Out-Null, Out-String, Pop-Location, Protect-CmsMessage, Push-Location, Read-Host, Receive-Job, Receive-PSSession, Register-ArgumentCompleter, Register-CimIndicationEvent, Register-EngineEvent, Register-ObjectEvent, Register-PackageSource, Register-PSSessionConfiguration, Remove-Alias, Remove-CimInstance, Remove-CimSession, Remove-Event, Remove-Item, Remove-ItemProperty, Remove-Job, Remove-Module, Remove-PSBreakpoint, Remove-PSDrive, Remove-PSReadlineKeyHandler, Remove-PSSession, Remove-Service, Remove-TypeData, Remove-Variable, Remove-WSManInstance, Rename-Computer, Rename-Item, Rename-ItemProperty, Resolve-Path, Restart-Computer, Restart-Service, Resume-Service, Save-Help, Save-Package, Select-Object, Select-String, Select-Xml, Send-MailMessage, Set-Acl, Set-Alias, Set-AuthenticodeSignature, Set-CimInstance, Set-Content, Set-Date, Set-ExecutionPolicy, Set-Item, Set-ItemProperty, Set-Location, Set-PackageSource, Set-PSBreakpoint, Set-PSDebug, Set-PSReadlineKeyHandler, Set-PSReadlineOption, Set-PSSessionConfiguration, Set-Service, Set-StrictMode, Set-TimeZone, Set-TraceSource, Set-Variable, Set-WSManInstance, Set-WSManQuickConfig, Sort-Object, Split-Path, Start-Job, Start-Process, Start-Service, Start-Sleep, Start-Transcript, Stop-Computer, Stop-Job, Stop-Process, Stop-Service, Stop-Transcript, Suspend-Service, Tee-Object, Test-FileCatalog, Test-ModuleManifest, Test-Path, Test-PSSessionConfigurationFile, Test-WSMan, Trace-Command, Unblock-File, Uninstall-Package, Unprotect-CmsMessage, Unregister-Event, Unregister-PackageSource, Unregister-PSSessionConfiguration, Update-FormatData, Update-Help, Update-TypeData, Wait-Debugger, Wait-Event, Wait-Job, Wait-Process, Where-Object, Write-Debug, Write-Error, Write-Host, Write-Information, Write-Output, Write-Progress, Write-Verbose, Write-Warning |
PowerShell Coreのコマンドレットは命名規則が「動詞-名詞」のようになっており、名前からなんとなくどういった処理をするものかが想像できるようになっている。また、コマンドレットがどういった処理を行うものかは次のコマンドで調べることができる。
Get-Help コマンドレットや関数 -Online
上記コマンドを実行するとブラウザがオンラインマニュアルを表示する。Webブラウザから直接調べる場合には「PowerShell Module Browser」からコマンドレットやエイリアス名を入力して検索を実施すればよい。
よく使うコマンドレットとエイリアスを知ろう
PowerShellのすべてのコマンドレットとその使い方を覚えるのは不可能だ(それはUNIXコマンドも同じだけれども)。
覚えるにあたっては利用頻度が高いものを選ぶべきだが、その一つの指針としては、エイリアスの用意されているコマンドレットに注目するとよいだろう。短縮コマンド名が必要とされるほど、使用頻度の高いということである。
macOS High Sierraで動作しているPowerShell Core 6.0.2でエイリアスの設定されているコマンドレットを調べると次のようになる。
コマンドレット | エイリアス |
---|---|
Where-Object | ? |
ForEach-Object | % |
Set-Location | cd |
Set-Location | chdir |
Clear-Content | clc |
Clear-Host | clear |
Clear-History | clhy |
Clear-Item | cli |
Clear-ItemProperty | clp |
Clear-Host | cls |
Clear-Variable | clv |
Copy-Item | copy |
Copy-Item | cpi |
Convert-Path | cvpa |
Disable-PSBreakpoint | dbp |
Remove-Item | del |
Get-ChildItem | dir |
Enable-PSBreakpoint | ebp |
Write-Output | echo |
Export-Alias | epal |
Export-Csv | epcsv |
Remove-Item | erase |
Enter-PSSession | etsn |
Exit-PSSession | exsn |
Format-Custom | fc |
Format-Hex | fhx |
Find-Module | fimo |
Format-List | fl |
ForEach-Object | foreach |
Format-Table | ft |
Format-Wide | fw |
Get-Alias | gal |
Get-PSBreakpoint | gbp |
Get-Content | gc |
Get-DSCConfiguration | gcfg |
Get-DscConfigurationStatus | gcfgs |
Get-ChildItem | gci |
Get-Command | gcm |
Get-PSCallStack | gcs |
Get-PSDrive | gdr |
Get-History | ghy |
Get-Item | gi |
Get-Job | gjb |
Get-Location | gl |
Get-DSCLocalConfigurationManager | glcm |
Get-Member | gm |
Get-Module | gmo |
Get-ItemProperty | gp |
Get-Process | gps |
Get-ItemPropertyValue | gpv |
Group-Object | group |
Get-PSSession | gsn |
Get-TimeZone | gtz |
Get-Unique | gu |
Get-Variable | gv |
Get-History | h |
Get-History | history |
Invoke-Command | icm |
Invoke-Expression | iex |
Invoke-History | ihy |
Invoke-Item | ii |
Install-Module | inmo |
Import-Alias | ipal |
Import-Csv | ipcsv |
Import-Module | ipmo |
Invoke-RestMethod | irm |
Invoke-WebRequest | iwr |
Stop-Process | kill |
mkdir | md |
Measure-Object | measure |
Move-Item | mi |
Move-Item | move |
Move-ItemProperty | mp |
New-Alias | nal |
New-PSDrive | ndr |
New-Item | ni |
New-Module | nmo |
New-PSSession | nsn |
New-Variable | nv |
Out-Host | oh |
Publish-DSCConfiguration | pbcfg |
Pop-Location | popd |
Publish-Module | pumo |
Push-Location | pushd |
Get-Location | pwd |
Invoke-History | r |
Remove-PSBreakpoint | rbp |
Receive-Job | rcjb |
Receive-PSSession | rcsn |
Remove-Item | rd |
Remove-PSDrive | rdr |
Rename-Item | ren |
Remove-Item | ri |
Remove-Job | rjb |
Remove-Module | rmo |
Rename-Item | rni |
Rename-ItemProperty | rnp |
Remove-ItemProperty | rp |
Remove-PSSession | rsn |
Restore-DSCConfiguration | rtcfg |
Remove-Variable | rv |
Resolve-Path | rvpa |
Start-DSCConfiguration | sacfg |
Start-Job | sajb |
Set-Alias | sal |
Start-Process | saps |
Set-PSBreakpoint | sbp |
Select-Object | select |
Set-Variable | set |
Set-Item | si |
Set-Location | sl |
Set-DSCLocalConfigurationManager | slcm |
Select-String | sls |
Set-ItemProperty | sp |
Stop-Job | spjb |
Stop-Process | spps |
Set-Variable | sv |
Test-DSCConfiguration | tcfg |
Get-Content | type |
Update-DscLocalConfigurationManager | ulcm |
Update-DSCConfiguration | upcfg |
Update-Module | upmo |
Where-Object | where |
Wait-Job | wjb |
PowerShell Coreのエイリアスを調べると、UNIX系コマンドとなるべくかぶらず、かつ、DOSコマンドと同じ名前が用意できる場合にはそれを採用していることがわかる。それ以外のエイリアスは基本的に「動詞-名詞」の頭文字または頭から2~3文字をそれぞれ合わせた短縮名になっている。
アプリケーションではなくコマンドレットに慣れていく
PowerShell Coreでは、環境に用意されているコマンドをアプリケーションとして利用できるため、どうしても最初は使い慣れた環境側のコマンドを使うようにしてPowerShellを使ってしまう。
しかしそれでは、せっかくWindows、macOS、Linuxで動作するPowerShell Coreのポータビリティ性というか、Windowsで手に入れたスキルがそのままmacOSで使える、あるいは、macOSで使っているスキルをそのままWindowsで、というクロスプラットフォームの利点が活かせなくなってしまう。
ということで当面は、PowerShellのコマンドレットまたは関数だけで処理を行うといった学習に取り組んでいくとよいんじゃないかと思う。せっかくなら新しい機能を学習して自らのスキルを伸ばしていこう。