8

catch コマンドに問題があります。処理しようとしている次のスクリプトがあります。

Try
{
    Add-Computer -DomainName "MyDomain.Dom" -Credential $DomainCred -PassThru -ErrorAction Stop
}

Catch [System.InvalidOperationException]
{
    "Your computer is unable to contact the domain"
}

これを実行するたびに、catch ブロックに何も入っていません。スクリプトから取得したと報告されたエラーは次のとおりです。

PSMessageDetails      :
Exception             : System.InvalidOperationException: This command cannot be executed on target computer('') due to following error: The specified domain either does not exist or could not
                        be contacted.
TargetObject          :
CategoryInfo          : InvalidOperation: (MYPC:String) [Add-Computer], InvalidOperationException
FullyQualifiedErrorId : InvalidOperationException,Microsoft.PowerShell.Commands.AddComputerCommand
ErrorDetails          :
InvocationInfo        : System.Management.Automation.InvocationInfo
PipelineIterationInfo : {0, 1}

何か案は?


実用的な解決策 (協力してくれた PK と Patrick に感謝します):

Try
{
    Add-Computer -DomainName "MyDomain.Dom" -Credential $DomainCred -PassThru -ErrorAction Stop
}

Catch [System.Management.Automation.RuntimeException]
{
    "Your computer is unable to contact the domain"
}
4

5 に答える 5

3

System.Management.Automation.RuntimeExceptionの代わりにキャッチしてみてくださいSystem.InvalidOperationException

Try
{
    Add-Computer -DomainName "MyDomain.Dom" -Credential $DomainCred
}

Catch [System.Management.Automation.RuntimeException]
{
    'Error: {0}' -f $_.Exception.Message
}
于 2012-04-17T14:26:57.203 に答える
2

コマンドレットに「-ErrorActionPreference Stop」を追加します。

例えば、

Add-Computer -DomainName "MyDomain.Dom" -Credential $DomainCred -EA Stop

さまざまなコマンドレット、特に Active Directory のような「アドオン」コマンドレットがエラーを処理する方法には、いくつかの矛盾があるようです。ただし、基本的な考え方は、PowerShell catch が終了エラーのみをキャッチすることであり、上記の例外はデフォルトではありません。したがって、使用-EA Stopすると、強制的に終了エラーになり、catch ブロックがトリガーされます。

これは Ed Wilson のテーマです: Write PowerShell Functions That Accept Pipelined Input

于 2012-04-17T15:49:35.600 に答える
1

これを機能させることができました:

Try
{
    Add-Computer -DomainName "MyDomain.Dom" -Credential $DomainCred -PassThru -ErrorAction Stop
}

Catch
{
    "Your computer is unable to contact the domain"
}

-PassThruAdd-Computerコマンドの結果をシェルに返します。

-ErrorAction Stopエラーが発生したときに停止するように PowerShell に指示します。これにより、表示されていたエラー出力が抑制されます。

于 2012-04-17T15:47:06.567 に答える
0

それを置く-Passthruことで、エラーをキャッチすることができました。

于 2012-04-17T17:05:04.880 に答える
0
    FullName                                                                                                                                                                   
--------                                                                                                                                                                   
System.Management.Automation.RuntimeException                                                                                                                              
The object of type "Microsoft.PowerShell.Commands.Internal.Format.FormatStartData" is not valid or not in the correct sequence. This is likely caused by a user-specified "f
ormat-list" command which is conflicting with the default formatting.
    + CategoryInfo          : InvalidData: (:) [out-lineoutput], InvalidOperationException
    + FullyQualifiedErrorId : ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand
于 2012-04-17T15:38:29.430 に答える