PowerShell で Visual SourceSafe から最新のソースを取得するための関数。
VSSFLAG_RECURSYES フラグにより、プロジェクトツリー内のサブプロジェクトは再帰的に取得される。
[ パラメータ ]
sourcePathInVss
VSS 上のソースのパス ( ファイルまたはフォルダ )。
vssIniFilePath
srcsafe.ini ファイルのパス。
localPath
取得したソースを保存するローカルパス。
省略した場合、VSS で設定した作業フォルダに保存される。
loginUserName
ログインするユーザー名。
省略した場合、現在のユーザー名が使用される。
loginUserPassword
ログインするユーザーのパスワード。
省略した場合、空の文字列が使用される。
[ Get-LatestSource関数 ]
function Get-LatestSource
{
Param([string] $sourcePathInVss, [string] $vssIniFilePath, [string] $localPath, [string] $loginUserName, [string] $loginUserPassword)
$finallyBlock =
{
$vssDatabase.Close();
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($vssItem) | Out-Null;
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($vssDatabase) | Out-Null;
trap { continue; }
};
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.VisualStudio.SourceSafe.Interop") | Out-Null;
$vssDatabase = New-Object "Microsoft.VisualStudio.SourceSafe.Interop.VSSDatabaseClass" @();
$vssDatabase.Open($vssIniFilePath, $loginUserName, $loginUserPassword);
$vssItem = $vssDatabase.get_VSSItem($sourcePathInVss, $False);
$flag = [Microsoft.VisualStudio.SourceSafe.Interop.VssFlags]::VSSFLAG_RECURSYES;
$vssItem.Get([ref]$localPath, $flag);
&$finallyBlock;
trap
{
&$finallyBlock;
break;
}
}
[ 使用例 ]
Get-LatestSource "$/Hoge.root" "\\YokoKen\VSS\srcsafe.ini";
# 自分用に適当に作ったのであしからず。
[ ソース変更履歴 ]
2007/07/26
・第一パラメータに、VSS上でのパスを複数指定するのではなく、単一のパスを指定するように変更。
・第三パラメータを追加し、ソースを保存するローカルパスを指定できるように変更。
・COM オブジェクトの解放処理を追加。
2007/07/27
・$ErrorActionPreference 変数が "Stop" に設定された環境だと後処理が行われない可能性があったので、確実に行われるように修正。
【 ダウンロード 】
自作の PowerShell 関数は、以下の記事からまとめてダウンロードできます。
YokoKen.PowerShell.Scripts
トラックバックURL↓
http://csharper.blog57.fc2.com/tb.php/147-aa6fb76b