LinuxでよくつかうコマンドをPowerShellでやってみる



確認したPowerShell：Windows PowerShell ISE Host 5.1



## curl -> Invoke-WebRequest



### HTTPのGETの結果をファイルに出力する。

````
Invoke-WebRequest -Uri <URI> -OutFile <OutPut File>
````



実行例:

```
PS D:\work> Invoke-WebRequest -Uri https://www.yahoo.co.jp -OutFile yahoo.txt
```



 https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/invoke-webrequest



## ls、find  -> Get-ChildItem  



### 指定したディレクトリのファイルの一覧を取得する



````
Get-ChildItem -Path <Path>
````



実行例:

```
PS D:\work> Get-ChildItem -Path C:\HashiCorp

    ディレクトリ: C:\HashiCorp
    
Mode                LastWriteTime         Length Name
---                -------------         ------ ----
da----       2017/11/26      0:15                Vagrant 
```



###  ファイルの名前だけ取り出す



````
Get-ChildItem -Path <Path> -Name
````

実行例:

```
PS D:\work> Get-ChildItem -Path C:\HashiCorp -Name
Vagrant
```



 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem 



### ファイルの検索(find)



```
PS D:\work> Get-ChildItem -Recurse  -Path D:\  -include  *yahoo* 

    ディレクトリ: D:\work


Mode          LastWriteTime Length Name     
----          ------------- ------ ----     
-a---- 2019/10/26     14:37  21696 yahoo.txt
```







## cat、head、tail -> Get-Content 

### ファイルの中身をみる(cat)

```
Get-Content -Path <Path>
```



実行例：

```
PS D:\work> Get-Content -Path .\test.text
test
```



### ファイルの最初のx行をみる(head)

```
Get-Content -Path <Path> -TotalCount <Number>
```

実行例：

```
PS D:\work> Get-Content -Path .\LineNumbers.txt -TotalCount 5
This is line 1.
This is line 2.
This is line 3.
This is line 4.
This is line 5.
```



### ファイルの最後のx行をみる(tail)

```
Get-Content -Path <Path> -tail <Number>
```

実行例：

```
PS D:\work> Get-Content -Path .\LineNumbers.txt -tail 5
This is line 96.
This is line 97.
This is line 98.
This is line 99.
This is line 100.
```



### ファイルの監視(tail -f) をする

ファイルを開いたままにし、末尾に更新されたら表示する。CTRL+Cで閉じる。



```
Get-Content -Path <Path> -Wait -tail <Number>
```

実行例：あとで104行目を追加

```
PS D:\work> Get-Content .\LineNumbers.txt -Wait -Tail 1
This is line 103.

This is line 104.
```

  



### ファイルのx行目～y行目をみる

```
(Get-Content -Path <Path>)[x-1..y-1]
```



実行例：10行目から20行目を見る

```
PS D:\work> (Get-Content -Path .\LineNumbers.txt)[9..19]
This is line 10.
This is line 11.
This is line 12.
This is line 13.
This is line 14.
This is line 15.
This is line 16.
This is line 17.
This is line 18.
This is line 19.
This is line 20.
```



### ファイルのx行目をみる

```
(Get-Content -Path <Path> -TotalCount x)[-1]
```



実行例：20行目をみる

```
PS D:\work> (Get-Content -Path .\LineNumbers.txt -TotalCount 20)[-1]
This is line 20.
```



 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content 



## wc -l -> Get-Content 

### ファイルの行数をみる

```
(Get-Content -Path <Path>).Length
```



実行例：

```
PS D:\work> (Get-Content -Path .\LineNumbers.txt).Length
104
```



## sort -> Sort-Object



### 昇順/降順で並び替える

```
Sort-Object -Property <項目>
Sort-Object -Property <項目>  -Descending
```



実行例：昇順

```
PS D:\work> Get-ChildItem -Path D:\Vagrant\ol121dg\database\stage\*.xml -FIle  |Sort-Object -Property Length
```

実行例：降順

```
PS D:\work> Get-ChildItem -Path D:\Vagrant\ol121dg\database\stage\*.xml -FIle  |Sort-Object -Property Length -Descending
```



実行例：CPU使用しているプロセスの上位10件を表示

```
PS D:\work> get-process  | Sort-Object -Property CPU  -Descending| Select-Object -first 5 | Format-Table -AutoSize

Handles NPM(K)  PM(K)  WS(K)    CPU(s)    Id SI ProcessName 
------- ------  -----  -----    ------    -- -- ----------- 
    638     65 182308 178116 13,120.11 10884  1 Amazon Music
    340     35  65688  70484    448.95 12192  1 chrome      
    360     41  86680 105996    430.75 11444  1 chrome      
    359     38  70972  71644    424.66 11956  1 chrome      
   1351     61 102576 115080    392.34 10500  1 Amazon Music
```



### 一意な一覧を取り出す(uniq)

``` 
Sort-Object -Property <項目>  -Unique 
```



実行例:一意なプロセス名を取り出す

```
PS D:\work> get-process | Sort-Object -Property ProcessName  -Unique | select-object ProcessName

ProcessName                                                   
-----------                                                   
Amazon Music                                                  
Amazon Music Helper                                           
AppleMobileDeviceProcess                                      
ApplicationFrameHost                   
＜以下略＞
```



または、``Get-Unique``を使用する。

```
PS D:\work> Get-Process | Sort-Object | Select-Object processname | Get-Unique -AsString
```





 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/sort-object

 https://docs.microsoft.com/en-us/powershell/module/Microsoft.PowerShell.Utility/Get-Unique



## grep -> Select-String



### ファイルから文字列を検索し表示する

```
Select-String -Path <パス> -Pattern '文字列'
```



実行例:ファイルからweatherを含む行を表示する

```
PS D:\work> Select-String -Path .\yahoo.txt -Pattern 'weather'

yahoo.txt:132:<td valign="top"><a href="https://weather.yahoo.co.jp/weather/">天気・災害</a></td>
```



 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-string



## history ->Get-History  



### 過去に実行したコマンドを確認する

```
Get-History  
```



実行例:直近3つのコマンドを確認する

```
PS D:\work> Get-History -count 3 | format-table -AutoSize

 Id CommandLine         
 -- -----------         
169 alias               
170 Get-History         
171 Get-History -count 3
```

実行例:コマンドを実行したステータスを確認する

```
PS D:\work> Get-History -count 3 | format-list


Id                 : 170
CommandLine        : Get-History
ExecutionStatus    : Completed
StartExecutionTime : 2019/10/27 13:12:31
EndExecutionTime   : 2019/10/27 13:12:31

Id                 : 171
CommandLine        : Get-History -count 3
ExecutionStatus    : Completed
StartExecutionTime : 2019/10/27 13:13:59
EndExecutionTime   : 2019/10/27 13:13:59

Id                 : 172
CommandLine        : Get-History -count 3 | format-table -AutoSize
ExecutionStatus    : Completed
StartExecutionTime : 2019/10/27 13:14:23
EndExecutionTime   : 2019/10/27 13:14:23

```



 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/get-history



## diff -> Compare-Object



### ファイルの文字列を比較する

```
Compare-Object  (Get-Content ファイル名1) (Get-Content ファイル名2)
```

実行例:aaa.txtとbbb.txtの差分を確認する

```
PS D:\work> Compare-Object (Get-Content .\aaa.txt) (Get-Content .\bbb.txt)

InputObject SideIndicator
----------- -------------
xxx         =>           
ccc         <=           

PS D:\work> Compare-Object (Get-Content .\aaa.txt) (Get-Content .\bbb.txt) -IncludeEqual

InputObject SideIndicator
----------- -------------
aaa         ==           
bbb         ==           
ddd         ==           
eee         ==           
xxx         =>           
ccc         <=           

```



 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/compare-object