2016年4月3日日曜日

PowerShellまとめ

久々WINDOWSネタだ。
ここでPowerShellについてまとめておきたい。


※まず最初にすべきこととしてスクリプトが動くようにするってのがある。
それにはこれ
Set-ExecutionPolicy RemoteSigned
管理者権限で実行すること

※次の作業としてフォントを変更する。
全角文字を入れた時おかしくなるため
 
このようにPOWERSHELLの左上アイコンクリックー>プロパティで出来る
MS ゴシックを選択

※次にすべきことしてバージョンを確認する
それにはこれ
$PSVersionTable
もしくは
$Host.version

$PSVersionTableだと出力は
Name                           Value
----                           -----
PSVersion                      5.0.10586.117
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.117
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
このPSVersion がそれ

$Host.version
だと
Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  117
みたいに出る
これがそのOSの最新であるのを確認
windows7 以降だと今現在5になる
というかぜひ5にすべきだ。便利なので。 

https://www.microsoft.com/en-us/download/details.aspx?id=50395
(英語のみ)



※次の作業としてchocolatey(https://chocolatey.org/)をインストールする。
パッケージ管理だ。以下は要管理者権限
POWERSHELL5 だと 旧来の
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))
 の他に

Get-PackageProvider Chocolatey -ForceBootstrap
で使えるようにして
Get-PackageSource 
で確認する方法もある。これをonegetというらしい。
ただchocolateyだとパッケージのアップデート可能だがonegetだとできないみたいだ。


※次の作業として コマンド履歴をpowershell終了しても残るように変更する。
終了しあとまた次使うときいちいち打ち込むのはやだろう。
それにはモジュールpsreadlineを入れればいい
cinst psget
install-module  psreadline
でOK 
Powershell4だといろいろ小細工する必要があったが 5 でなくなった。ちょっとうれしい。

※次にドライブを確認する
Get-PSDrive
でOK

 Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Alias                                  Alias
C                 187.86          8.71 FileSystem    C:\
Cert                                   Certificate   \
D                  25.57          3.42 FileSystem    D:\
Env                                    Environment
F                                      FileSystem    F:\
Function                               Function
G                   0.04          0.16 FileSystem    G:\
HKCU                                   Registry      HKEY_CURRENT_USER
HKLM                                   Registry      HKEY_LOCAL_MACHINE
I                 195.11         26.19 FileSystem    I:\
Variable                               Variable
WSMan                                  WSMan

みたいにでる。

ここで 物理 ドライブ(C:\、D:\...)以外のものがあることに注意
すべてのドライブにcd で行けてlsで確認できるのでしてほしい。

ここで覚えておくべきなのは
envで環境変数にアクセスでき
 Variableで変数にアクセス出来ることだ。  
例えば echo $variable:profile でプロファイルのパスが出る
これは 省略して   echo $profile でも OK 

ちなみに 値は 
 C:\Users\kouji\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1



※次にプロファイルを編集
このプロファイルだがbashとかと同じく起動時に読み込まれるスクリプト
なんでも書けるのでalias とかfunction を切っておく

まずファイルを作る
New-item –type file –force $profile

編集
notepad $profile

中身はこんな感じ
Set-Alias grep Select-String
Set-Alias firefox "C:\Program Files\Mozilla Firefox\firefox.exe"

#再起動
function reboot(){
  shutdown -r -t 0
}

#管理者権限で起動
function su
{
    Start-Process powershell.exe -Verb runas
}


※次にSSHする方法
powershellでSSHするには
Win32-OpenSSH
で可能
名前に反して64bitに対応している
インストールは
cinst Win32-OpenSSH
でOK
ssh ....
が使える。
ただし事前に文字コードを変える必要がある(LINUXはほとんどUTF8なので)
 [Console]::OutputEncoding = [Text.Encoding]::UTF8;
でOK 

※次に画面の色


あと色に関するものは
$Host.UI.RawUI.BackgroundColor
$Host.UI.RawUI.ForegroundColor
$Host.PrivateData.ErrorForegroundColor
$Host.PrivateData.ErrorBackgroundColor
$Host.PrivateData.WarningForegroundColor
$Host.PrivateData.WarningBackgroundColor
$Host.PrivateData.DebugForegroundColor
$Host.PrivateData.DebugBackgroundColor
$Host.PrivateData.VerboseForegroundColor
$Host.PrivateData.VerboseBackgroundColor
$Host.PrivateData.ProgressForegroundColor
$Host.PrivateData.ProgressBackgroundColor
[console]::ForegroundColor
[console]::BackgroundColor
[System.Console]::ForegroundColor
[System.Console]::BackgroundColor

Get-PSReadlineOption
Set-PSReadlineOption -TokenKind Command -ForegroundColor Magenta
Set-PSReadlineOption -TokenKind Comment -ForegroundColor Black -BackgroundColor White



モジュールについて
モジュールの追加で機能拡張可能
そのパスは
$env:PSModulePath
インストール可能なモジュールのリスト
find-module
検索
find-module XXXX
インストールされたモジュールのリスト
Get-Module -ListAvailable
モジュールインストール
install-module XXXXX

モジュールのコマンドリストアップ
get-command -module XXXX
 

  
※最後に
己自身が勉強する必要がある。