2010-12-13 57 views
59

Je cherche le meilleur moyen de vérifier si un objet Com existe.La meilleure façon de vérifier si un objet PowerShell existe?

Voici le code que j'ai; Je voudrais améliorer la dernière ligne:

$ie = New-Object -ComObject InternetExplorer.Application 
$ie.Navigate("http://www.stackoverflow.com") 
$ie.Visible = $true 

$ie -ne $null #Are there better options? 

Répondre

74

Je tiendrais avec le chèque $null puisque toute valeur autre que '' (chaîne vide), 0, et $false$null passera le test: if ($ie) {...}.

38

Vous pouvez également faire

if ($ie) { 
    # Do Something if $ie is not null 
} 
+0

J'aime cette option et sa négation 'si (ie $ -pas) {# faire quelque chose si $ ie n'existe pas/est Falsey}' –

11

Dans votre exemple particulier peut-être vous n'avez pas du tout effectuer de contrôles. Est-ce possible que New-Object renvoie null? Je n'ai jamais vu ça. La commande devrait échouer en cas de problème et le reste du code de l'exemple ne sera pas exécuté. Alors pourquoi devrions-nous faire ces vérifications du tout?

uniquement dans le code comme ci-dessous nous avons besoin de contrôles (comparaison explicite avec $ null est le meilleur):

# we just try to get a new object 
$ie = $null 
try { 
    $ie = New-Object -ComObject InternetExplorer.Application 
} 
catch { 
    Write-Warning $_ 
} 

# check and continuation 
if ($ie -ne $null) { 
    ... 
} 
+1

Si le COM Type d'objet n » t existe, New-Object lèvera une exception. Mais je ne vois pas comment cela pourrait rendre un nul. En outre, ignorer l'exception uniquement pour tester ensuite null est une mauvaise forme. – JasonMArcher

+0

@JasonMArcher: Je suis d'accord avec la dernière remarque, absolument. Mais vraiment, que voulez-vous que j'écrive dans l'exemple de démonstration? En outre, selon un scénario, même ce code pourrait être très bien. –

+0

Essentiellement, mettez tout le code qui utilise $ ie dans le try {}. De cette façon, il est ignoré s'il y a une exception. – JasonMArcher

1

type de vérifier avec l'opérateur -is retourne false pour une valeur nulle. Dans la plupart des cas, sinon tous, $ value -is [System.Object] sera vrai pour toute valeur non nulle possible. (Dans tous les cas, il sera faux pour toute valeur nulle.)

Ma valeur n'est rien si ce n'est un objet.

+1

Ou même '$ value -is [__ComObject]' –