誰でもわかる!インタラクティブシェル【powershell】
Sal
powershell powershellクックブックの備忘録です。今回は一章のインタラクティブシェルについてまとめました。

誰でもわかる!インタラクティブシェル【powershell】

  1. powershellから他のプログラムを実行する
  2. オリジナルのシェル、プロファイル、プロンプトをカスタマイズする。
  3. #別のカスタマイズ例
  4. コマンドのヘルプを表示したい。
  5. コマンドを見つけたい
  6. #コマンドの構成について
  7. コマンドの計測時間を調べる
  8. (理解できなかったレシピ)シェルをカスタマイズして生産性をあげる
  9. 以前呼び出したコマンドを実行したい
  10. コマンドの出力をファイルに格納したい
  11. #やり方2 > を使う
  12. #Out-File でファイル出力
  13. #表として出力する
参考:海外版のpowershell pdfファイル URL:http://index-of.co.uk/Microsoft-Windows-Ebooks/OReilly.Windows.PowerShell.Cookbook.Oct.2007.pdf
## powershellから他のプログラムを実行する

具体例



//フルパスを指定するときはシングルクォートで囲み、
& 'C:\Program Files\Program\Program.exe' arguments

//スペースを含まない時はシングルkウォーとで囲む必要はない
.\Program.exe arguments

//シングルクォーとで囲んだ文字列は、&で実行する。
& '.\Program With Spaces.exe' arguments

## オリジナルのシェル、プロファイル、プロンプトをカスタマイズする。

notepad $profile

解説:notepadはメモ帳を開くコマンド。引数にファイルパスを指定することでそのファイルを開くことができる。

$profileはプロファイルスクリプト(カスタム可能なスクリプトでユーザーごとに設定できるもの)のパスが入っているため、 notepad $profileはプロファイルスクリプトをメモ帳で開くことができる。

カスタマイズ例



function Prompt
{
 "PS [$env:COMPUTERNAME] >"
}

解説:Prompt関数は特別な関数である。この関数はpowershellの画面の入力部分をカスタマイズすることができる関数。

本関数ではコンピューター名を表示するようにカスタマイズしている。

ちなみに、$profileを変更した直後はコードがまだ実行されていないので、すぐには適用されない。

$profileはpowershellを起動した際に実行されるので、再度powershellを起動し直したほうがいい。

## #別のカスタマイズ例

function Prompt
{
 $id = 1
 $historyItem = Get-History -Count 1
 if($historyItem)
 {
 $id = $historyItem.Id + 1
 }
 Write-Host -ForegroundColor DarkGray "`n[$(Get-Location)]"
 Write-Host -NoNewLine "PS:$id > "
 $host.UI.RawUI.WindowTitle = "$(Get-Location)"
 "`b"
}
## コマンドのヘルプを表示したい。
以下の構文で調べることができる。

    Get-Help 調べたいコマンド

## コマンドを見つけたい

    Get-Command

ところで、コマンドの一部だけ知っているがそれ以外が知らない時は、以下のようにワイルドカード(正規表現)を使うことも可能


Get-Command *コマンドの一部*

## #コマンドの構成について
Powershellのコマンドの名前には一貫性がある その一貫性とは 動詞-名詞 の順番でコマンドが構成されているということである。 このメリットによって以下のような芸当が可能である。

1、動詞から検索する。


Get-Command -Verb Get

2、名詞から検索する。


Get-Command -Noun Process

このコマンドによって、例えばGet-Process(タスクマネージャーと同じコマンド)を手に入れられる。
## コマンドの計測時間を調べる

Measure-Command

## (理解できなかったレシピ)シェルをカスタマイズして生産性をあげる

以下のレシピはまだまだ理解できなかった。要修行。


Push-Location
Set-Location HKCU:\Console
New-Item '.\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe'
Set-Location '.\%SystemRoot%_system32_WindowsPowerShell_v1.0_powershell.exe'
New-ItemProperty . ColorTable00 -type DWORD -value 0x00562401
New-ItemProperty . ColorTable07 -type DWORD -value 0x00f0edee
New-ItemProperty . FaceName -type STRING -value "Lucida Console"
New-ItemProperty . FontFamily -type DWORD -value 0x00000036
New-ItemProperty . FontSize -type DWORD -value 0x000c0000
New-ItemProperty . FontWeight -type DWORD -value 0x00000190
New-ItemProperty . HistoryNoDup -type DWORD -value 0x00000000
New-ItemProperty . QuickEdit -type DWORD -value 0x00000001
New-ItemProperty . ScreenBufferSize -type DWORD -value 0x0bb80078
New-ItemProperty . WindowSize -type DWORD -value 0x00320078
Pop-Location

## 以前呼び出したコマンドを実行したい

Get-History         #履歴を調べIDを取得
Invoke-History (ID) #IDを記述して呼び起こす

## コマンドの出力をファイルに格納したい

//やり方1
Get-ChildItem | Out-File unicodeFile.txt
Get-Content filename.cs | Out-File -Encoding ASCII file.txt
Get-ChildItem | Out-File-Width 120 unicodeFile.cs

//やり方2
Get-ChildItem > files.txt 

## #やり方2 > を使う
実行したいコマンドの右に > を書き、さらにその右にファイル名を書くことで、 ファイルに実行結果を格納することができる。 追記したい場合は >> を使う。

Get-ChildItem >> files.txt 

この方法は簡単ではあるが、出力を綺麗にできない。
## #Out-File でファイル出力

>を使った方法と違い、ファイルの出力幅のコントロールが可能。 さらに、文字コードの指定もできる等、幅広い。


Get-ChildItem | Out-File-Width 120 unicodeFile.cs

配列、表として出力したい。横幅を調節したい。

パイプラインを用いて、Format-List、format-Table、Format-Widthへ渡す


$currentError = $error[0]
$currentError | Format-List -Force

$errorは履歴で最新のコマンドの実行結果がエラーであった場合の全てを吐き出す。

上記の例ではその一列目を取り出したあと、配列として出力する。

## #表として出力する

//プロセス一覧
Get-Process

//表として出力
Get-Process | Format-Table

//Name WSの列のみ出力
Get-Process | Format-Table Name,WS

//幅を綺麗にする
Get-Process | Format-Table Name,WS -Auto

//さらにカスタマイズ
$fields = "Name",@{
    Label = "WS (MB)"; 
    Expression = {$_.WS / 1mb}; 
    Align = "Right"
} 
Get-Process | Format-Table $fields -Auto

title:誰でもわかる!インタラクティブシェル【powershell】 description:powershellクックブックの備忘録です。今回は一章のインタラクティブシェルについてまとめました。 img:https://cdn.slidesharecdn.com/ss_thumbnails/windows-powershell-cookbook-the-complete-guide-to-scripting-microsofts-command-shell-190312151315-thumbnail-4.jpg?cb=1552403608 category_script:page_name.startswith("1")