Powershell
Powershell
最近都在用 Windows 下的 Powershell,功能上還不錯,也能利用 pipeline 串連不同程式。但不同於 unix shell input 和 output 以 text 為基礎,Powershell 的 input 和 output 都是 CLR object,在這裡整理一下用法。
Environment and Variable
Add path into executable path:
PS /Users/jason/my-gatsby-site> $Env:Path+="C:\docfx"
Get-Command
利用 Get-Command
, 查看 command 用那個 executable
PS /Users/jason/my-gatsby-site> Get-Command node
CommandType Name Version Source
----------- ---- ------- ------
Application node 0.0.0.0 /usr/local/bin/node
Unix style alias
- Get-ChildItem: ls
- Get-Content: cat
- Get-Help: man
例子
Syntax:
foreach { $_ }
: iterate 每一個 object,$_
代表每一個 elements@()
: Array$element
: variable?
: Where-Object
預覽 file
Get-ChildItem *.txt
: unix 的 ls,列出當下的 txt
foreach ($element in @("*.txt", "*.js")) {
Get-ChildItem $element | foreach {
Write-Host "====================" $_.Name "====================";
Get-Content -TotalCount 100 $_ ;
Remove-Item -confirm $_
}
}
預覽 CSV
Import-Csv god.csv | Out-GridView
查看 Member
Get-ChildItem
每個 object 都是 System.IO.FileInfo,是 NET Framework,因此可以用利用當中的 method,例如 Name
。
Get-Service | Get-Member -MemberType Property
: 檢視 pipeline 中的 object 的 property
Get-ChildItem *.txt | Get-Member
TypeName: System.IO.FileInfo
或者
$(Get-ChildItem *.txt).GetType()
Get-Date | Select-Object -ExpandProperty DayOfWeek
Powershell Core
Mac 和 Linux 上可以使用 Powershell Core
Trick
使用 cmd commmand
cmd --% /c rmdir /s "xxxxxdirectory"