Tristement, à cause de cmdlets bogués comme New-RegKey et Clear-Disk. aucune de ces réponses n'est suffisante. J'ai actuellement choisi le code suivant dans un fichier appelé ps_support.ps1
:
Set-StrictMode -Version Latest
$ErrorActionPreference = "Stop"
$PSDefaultParameterValues['*:ErrorAction']='Stop'
function ThrowOnNativeFailure {
if (-not $?)
{
throw 'Native Failure'
}
}
Ensuite, dans n'importe quel fichier powershell, après le CmdletBinding
y Param
pour le fichier (si présent), j'ai ce qui suit :
$ErrorActionPreference = "Stop"
. "$PSScriptRoot\ps_support.ps1"
Le duplicata ErrorActionPreference = "Stop"
La ligne est intentionnelle. Si j'ai fait une gaffe et que d'une manière ou d'une autre j'ai obtenu le chemin vers ps_support.ps1
faux, qui ne doit pas échouer silencieusement !
Je garde ps_support.ps1
dans un emplacement commun à mon dépôt/espace de travail, de sorte que le chemin d'accès pour le dot-sourcing peut changer en fonction de l'emplacement du dépôt actuel. .ps1
est.
Tout appel natif reçoit ce traitement :
native_call.exe
ThrowOnNativeFailure
Le fait d'avoir ce fichier à dot-source m'a aidé à rester sain d'esprit lors de l'écriture de scripts powershell :-)