プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

Powershellのインタラクティブシェル

Powershell概要

minegishirei.hatenablog.com

windows power shellとは何か

minegishirei.hatenablog.com

Powershellインタラクティブシェル

minegishirei.hatenablog.com

Get-Commandでコマンドの使い方を確認する

minegishirei.hatenablog.com

Get-Helpコマンドが解決する課題

minegishirei.hatenablog.com

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を変更した直後はコードがまだ実行されていないので、すぐには適用されない。

$profilepowershellを起動した際に実行されるので、再度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)"
}

コマンドのヘルプを表示したい。

以下の構文で調べることができる。

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

参考:海外版のpowershell pdfファイル

URL:http://index-of.co.uk/Microsoft-Windows-Ebooks/OReilly.Windows.PowerShell.Cookbook.Oct.2007.pdf

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")

page:https://minegishirei.hatenablog.com/entry/2024/05/21/195649