[PowerShell 2.0 入門] PSドライブ

PSドライブとは、PowerShellからファイル、フォルダ、レジストリなどにアクセスするための手段です。

従来のコマンドプロンプトの場合はファイル操作しかできなかったのですが、PowerShell で取り入れられたPSドライブによって、ファイル、フォルダ、レジストリなどに一貫した操作方法で取り扱うことができます。

PSドライブとして扱うことができるもののリストは Get-PSDrive コマンドレットで取得することができます。

Providerという列を見ると、Alias(エイリアス)やCertificate(デジタル署名)、Environment(環境変数)、Registry(レジストリ)、FileSystem(ファイルシステム)、Variable(変数)、WSMan(WinRMサービス)などがあることを確認できます。

もしもファイルシステムの一覧のみを取得したい場合には -PSProvider パラメータを使用して(Provider列にある名称を指定することができます)

Get-PSDrive -PSProvider filesystem

と入力します。

レジストリの一覧を取得したい場合には

Get-PSDrive -PSProvider Registry

と入力します。

さて、PSドライブの一覧を取得する方法がわかりました。

PSドライブは、ファイルシステムを操作する要領でアクセスできるので

Set-Location HKCU:

とすると、レジストリのHKEY_CURRENT_USERにアクセスすることができるようになります。

Set-Location コマンドレットはカレント変更するコマンドレットです)

コンソールウィンドウをよく見ると、 カレントが「PS C:\Work」から「PS HKCU:」に変わっていることを確認できます。

ファイルシステムに戻る場合も Set-Location コマンドレットを使用して

Set-Location C:\

のように入力します。

Set-Location コマンドレットは、cd というエイリアスを持っていますので

cd c:\

と入力することも可能です。

このようにPSドライブという仕組みがあることで、レジストリやその他のプロバイダもファイルシステムを操作するように取り扱うことが可能です。

ExcelファイルからPDFファイルやXPSファイルを作成する

Hey Scripting Guy! BLOG(海外サイト) は今週はExcel特集をしているようです。

その中で、ExcelファイルをPDFとして保存する記事がありました。

ネタ元「Save a Microsoft Excel Workbook as a PDF File by Using PowerShell

この記事のスクリプトをちょっと加工して、次のような関数を作成したので紹介します。

function Convert-Xls([string]$path, [switch]$xps)
{
    $xlFixedFormat = "Microsoft.Office.Interop.Excel.xlFixedFormatType" -as [type]

    # Excelオブジェクトの作成
    $objExcel = New-Object -ComObject Excel.Application
    $objExcel.Visible = $False

    $workbook = $objExcel.workbooks.Open($path, 3)
    $workbook.Saved = $True

    # ファイル名からフルパスを取得して拡張子を外す
    $fullpath = [System.IO.Path]::GetFullPath($path)
    $filepath = [System.IO.Path]::GetFileNameWithoutExtension($fullpath)

    if ( $xps )
    {
        # XPSとして保存する
        $workbook.ExportAsFixedFormat($xlFixedFormat::xlTypeXPS, $filepath + ".xps")
    }
    else
    {
        # PDFとして保存する
        $workbook.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $filepath + ".pdf")
    }

    # Excelの終了
    $objExcel.Workbooks.Close()
    [void]$objExcel.Quit
}

この関数を使用すると、任意のExcelファイルからPDFやXPSファイルを作成することができます。

書式は
Convert-Xls PDFやXPSの作成元となるExcelファイルのパス [-XPS]

たとえば C:\Work\Test.xls からPDFを作成するには

Convert-Xls C:\Work\Test.xls

もしもXPSファイルを作成したい場合はスイッチパラメータ -XPS を使用して下記のように記述します。

Convert-Xls C:\Work\Test.xls -XPS

この関数を使用すれば、わざわざExcelを起動してPDFやXPSに保存し直す必要がなくなります。
ぜひお試しください。

[PowerShell 2.0 入門] エイリアスのエクスポートとインポート

作成したエイリアスの有効期間は「PowerShellが閉じられるまで」です。

せっかく作成したエイリアスなのだから、次回移行も使えるようにしたいですね。

エイリアスはファイルに保存したり、ファイルから取り出してPowerShellに登録したりするコマンドレットが準備されています。

エイリアスを保存するには Export-Alias、ファイルから取り出すには Import-Alias コマンドレットを使用します。

まずは Export-Alias コマンドレットを使用して、現在のセッションのエイリアスをファイルにエクスポートします。

書式は
Export-Alias -Path 出力先のパス

Export-Aliasには他にもパラメータがありますが、ここでは説明しません。

興味がある場合は、help Export-Alias -Detailed で調べてみてください。

Export-Aliasすることによって、自分が作成したエイリアスの定義もファイルに保存されます。

次に、Import-Alias コマンドレットを使用して、ファイルからエイリアスを読み込んで登録登録する方法について学びましょう。

書式は

Import-Alias -Path 読み込むファイルのパス

Import-Alias, Export-Alias コマンドレットではなく、プロファイルを使用してエイリアスを自動で読み込む方法もあるのですが、プロファイルについては別の機会に紹介したいと思います。

[PowerShell 2.0 入門] エイリアスを作成する

Set-Alias コマンドレットを使用すると、コマンドレットや関数、スクリプト、実行可能ファイルなどにエイリアスを作成することが出来ます。

(「エイリアスって何?」と思われた方は前回の記事「[PowerShell 2.0 入門] エイリアスについて」を参照してください)

書式は

Set-Alias -Name エイリアス -Value コマンドレット(関数、実行可能ファイルなど)

です。

-Nameパラメータと-Valueパラメータを省略して

Set-Alias エイリアス コマンドレット(関数、実行可能ファイルなど)

と記述しても構いません。

早速ですが、Get-ChildItemコマンドレットにlistというエイリアスを付けてみましょう。

Set-Alias list Get-ChildItem

これで、次回から list と入力すると Get-ChildIem コマンドレットが動作するようになります。

今度は電卓アプリケーション(C:\Windows\System32\calc.exe)にdenというエイリアスを付けてみましょう。

Set-Alias den C:\Windows\System32\calc.exe

これで、次回から den と入力すると電卓アプリケーションが起動するようになります。


エイリアスを削除する方法についても学んでおきましょう。

エイリアスを削除するには Remove-Item コマンドレットを使用します。

書式は下記の通りです。

Remove-Item Alias:/エイリアス名

例えば、先ほど作成したdenというエイリアスを削除するには下記のように入力します。

Remove-Item Alias:/den

次回はエイリアスのインポートとエクスポートについて説明します。
お楽しみに。

[PowerShell 2.0 入門] エイリアスについて

PowerShell の多くのコマンドレットには別名を持っており、この別名を入力してもコマンドレットが機能するように設計されています。

この別名のことをエイリアスと呼びます。

たとえば Clear-Host という画面を消去する機能を持つコマンドレットは Cls というエイリアスがあります。

Cls と入力すると、PowerShell はClear-Host コマンドレットを実行します。

どんなエイリアスがあるのかを調には Get-Alias というコマンドレットを使用します。

Get-Alias

特定のコマンドレットのエイリアスを調べるには、

Get-Alias -definition コマンドレット名

という書式を使用します。

たとえば Get-Command のエイリアスを調べるには

Get-Alias -definition Get-Command

と入力します。

こんどはエイリアスからコマンドレット名を調べてみましょう。

Get-Alias エイリアス名

という書式を使用します。

たとえば、gcm というエイリアスのコマンドレットを調べてみましょう。

Get-Alias gcm

gcm のコマンドレットは Get-Command であるということがわかりますね。


おまけ
普段 Unix も使用されているという方は ls, pwd, diff などを試してみてください。

これらは PowerShell が持つコマンドレットで、Unix のコマンドと同等の機能を持つものにエイリアスが付けられたものです。

ls は Get-ChildItem、pwd は Get-Location、diff は Compare-Objectのエイリアスです。