Out-String
次のようなものを使用して、「飾り気のない」実装を簡単に作成できます。
filter ConvertTo-String { "$_" }
これにより、フィルターに渡されたすべてのオブジェクトが強制的に文字列になります (PowerShell 文字列拡張を使用してToString
null 以外のオブジェクトを呼び出し$null
、空の文字列に変更します)。
以下の 5 つの要素の入力例に対してフィルターを実行すると、フィルターはそれらを対応する文字列値に変換します (整数は'1'
、 double '2.3'
、 null ''
、 string 'four'
、および hashtable になります'System.Collections.Hashtable'
)。
1,2.3,$null,'four',@{five=6} | ConvertTo-String
Get-ChildItem
(alias )
の出力に対してフィルターを実行すると、ls
同様の結果が得られます。
PS> Get-ChildItem
Directory: C:\Windows\System32\WindowsPowerShell\v1.0
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 13 Jul 2009 11:56 PM en-US
d---- 13 Jul 2009 11:52 PM Examples
d---- 13 Jul 2009 11:52 PM Modules
-a--- 13 Jul 2009 8:14 PM 452608 powershell.exe
-a--- 12 May 2012 10:28 AM 436 powershell.exe.config
...
PS> Get-ChildItem | ConvertTo-String
en-US
Examples
Modules
powershell.exe
powershell.exe.config
...
オブジェクトを文字列に変換すると、オブジェクトに元々含まれていた情報と機能が失われます。
- ハッシュテーブルを文字列に変換すると、その型名が得られます。ハッシュテーブルの にアクセスする
Count
ことも、その要素について何も知ることもできません。
- ファイル システム オブジェクトを文字列に変換すると、アイテムが要求された場所からの相対パスが得られます。アイテムのフル パスにアクセスしたり、 を取得したり、ファイル アイテムの を
LastWriteTime
判別したり、アイテムがファイルかディレクトリかを (追加の呼び出しを行わずに)Length
テストしたりすることはできません。
実際、元のオブジェクトが文字列の場合にのみ、安全な変換を行うことができます。これは、「末尾の空白」が存在する唯一の場合でもあります。
(言い換えれば、文字列ベースのシェルの制限をエミュレートしようとするよりも、できるだけ長くオブジェクトに固執する方が一般的に良い方法です;-)