2017-05-23 8 views
1

テキストファイルの各行に、名前の最後にIDを持つテキストファイルがあります。 は、私は、問題が解決しなかったが、このようにすべてのエラーを抑制しようとしたすべてのエラー ForEach-Objectループのエラーを無視します。

Get-Content -Path "C:\test\text.txt" | ForEach-Object { 
    $_.Substring($_.Length - 5) -ErrorAction 'SilentlyContinue' 
} 

空白行を無視するか、無視します。空行をスキップするか、foreachループ内のエラーメッセージを抑制するにはどうすればよいですか?

+0

パラメータ '-ErrorAction'は、コマンドレットでは使用できますが、オブジェクトメソッドでは使用できません。 –

答えて

3

あなたはあなたのコードの前に、グローバルエラー・アクション変数を変更し、バック、それがその後の以前の値だと、それを設定することができます。直前の文字列の長さをテストするためにIf文を使用し、また

$PrevErrorActionPreference = $ErrorActionPreference 
$ErrorActionPreference = 'silentlycontinue' 

Get-Content -Path "C:\test\text.txt" | ForEach-Object { 
    $_.Substring($_.Length - 5) 
} 

$ErrorActionPreference = $PrevErrorActionPreference 

SubStringを使用して:

Get-Content -Path "*.txt" | ForEach-Object { 
    If ($_.Length -ge 5) { $_.Substring($_.Length - 5) } 
} 

第三のオプションはTry..Catchブロックを使用することであろう。

Get-Content -Path "*.txt" | ForEach-Object { 
    Try { 
     $_.Substring($_.Length - 5) 
    } Catch { 
     # Do nothing 
    } 
} 
関連する問題