更新: SQLPS の要求に応じて PS1 の範囲内で動作するようにスクリプトを修正しました。
かわった:
IF($property.Value -match $regex){
$currentBadLine = (ConvertTo-Csv $_ -NoTypeInformation -Delimiter $delimiter);
$badLines += $currentBadLine[1,2]
};
に:
IF($property.Value -match $regex){
$badLines += $_ | Select-Object | ft -autoSize;
};
悪い行ごとに新しいヘッダーを出力しますが、それは世界の終わりではなく、防止する努力に値するものではありません。
データのインポートが台無しになる前に CSV ファイルを前処理する Powershell スクリプトがあります。
2 台のサーバーで連続して PS メジャー バージョンが少なくとも 2 であること、および次のコード スニペットが Powershell ISE で正常に動作することを確認しました。コードの目的は、CSV の各行を読み取り、$regex 変数で正規表現パターンを探して列をループすることです。エラーが見つかったら、それを修正する前にエラーを追跡して、インポートの準備が整ったクリーンアップされたファイルを出力する前に、後でエラー ログを書き込めるようにします。
%{
Foreach($Property in $_.PSObject.Properties){
IF($property.Value -match $regex){
$currentBadLine = (ConvertTo-Csv $_ -NoTypeInformation -Delimiter $delimiter);
$badLines += $currentBadLine[1,2]
};
$property.Value = $property.Value -replace $regex;
}
$_
}
しかし、そのコードをエージェント ジョブに入れると、エージェントは次のように文句を言います。
「'ConvertTo-Csv' という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してから再試行してください。'
問題は次のとおりです。エージェントの Powershell サブシステムは、システムの残りの部分とは異なるバージョンの Powershell を使用していますか? その場合、サブシステムが使用しているバージョンを確認し、可能であればアップグレードして、これを修正できるようにするにはどうすればよいですか。
サーバーが実行されています:
Windows Server 2008 R2 エンタープライズ
PS メジャー バージョン 2、マイナー 0 ビルド -1 リビジョン -1
SQL Server 2008 R2 SP1 10.5.2500.0 64 ビット
ありがとう!