2つの方法がある。
- .netframeworkのGetHashCodeメソッドを使う
- System.Security.Cryptography.MD5CryptoServiceProviderを使う
GetHashCodeメソッドの使う方法
$t = New-Object System.IO.DirectoryInfo(任意のファイル)などとする。動かしてみると・・・
$t.GetHashCode()
PS C:\work\PowerShell> $crd.GetHashCode()
53736498
数字8桁で出力される。明らかにハッシュ値の衝突(コリジョン)が心配。
System.Security.Cryptography.MD5CryptoServiceProviderを使う
System.Security.Cryptography 名前空間
http://msdn2.microsoft.com/ja-jp/library/system.security.cryptography(vs.80,d=toc).aspx
Get-MD5というファンクションを作成する。具体的には以下の内容を$PROFILEに追加する。
function Get-MD5([System.IO.FileInfo] $file = $(throw 'Usage: Get-MD5 [System.IO.FileInfo]'))
{
$stream = $null;
$cryptoServiceProvider = [System.Security.Cryptography.MD5CryptoServiceProvider];
$hashAlgorithm = new-object $cryptoServiceProvider
$stream = $file.OpenRead();
$hashByteArray = $hashAlgorithm.ComputeHash($stream);
$stream.Close();
## We have to be sure that we close the file stream if any exceptions are thrown.
trap
{
if ($stream -ne $null)
{
$stream.Close();
}
break;
}
return [string]$hashByteArray;
}
特定フォルダ内の重複ファイルを削除する
このあたりを読め↓
Windows PowerShell : Duplicate Files
http://blogs.msdn.com/powershell/archive/2006/04/25/583225.aspx
Windows PowerShell : Duplicate Files 2
http://blogs.msdn.com/powershell/archive/2006/04/25/583226.aspx
調査中:CUIでWindows Live Messengerを使えるようなソフトを作りたい
vim,emacsなどのエディタを"PowerShell上で"使いこなす
Set-Alias vi 'C:\Program Files\vim\vim.exe'
Vimerとしてこれ以外の解決策は思い浮かばない。ちなみに文字コードはUTF-8で統一していると後々トラブル少ない。
Unix系Shellのキーバインドが使いたい
・CTRL+Aで行頭、CTRL+EでEndなどの移動ショートカットを使う
・CTRL+Lでclear(cls)相当の動作をさせる
・CTRL+P, CTRL+N, CTRL+K, CTRL+Tなどを使う
これらは現状不可能。
特定フォルダに存在するショートカットだけを削除する
ショートカットファイルは拡張子がlnkなので"rm c:\temp\*.lnk"で一括削除設定してあるエイリアスを全て表示する
rm c:\document and settings\all user\デスクトップ\*.lnkするとスッキリするかも。
get-alias設定してあるエイリアスを削除する
rm alias:\(エイリアス名)実行中のプロセスからGetで始まるものを抽出する
gal | Where {$_.Definition -like "Get*"}findstrという昔ながらのコマンドを使って"gal | findstr Get*"としても同じことができるのだけれども、それをやりだすとテキストの意味を「人間が」考えて処理していた時代に逆行してしまうというジレンマあり。
使用できるCmdletを全て表示する
get-command環境変数を確認する
get-variable
gvというエイリアスがデフォルトで設定してあるが、私は"Set-Alias env Get-Variable"と$PROFILEに書いている。
補足: cmd.exeの環境変数にアクセスするためにenv:というドライブ名が設定されている。たとえば"$env:systemroot"とするとsystemrootが表示される。PowerShellのget-variableにenvのエイリ
アスを設定するのは誤解と勘違いの元かもしれない。注意されたし。
まだ続く