2013-08-14 3 views
0

Dans ce script simple, l'instruction if fonctionne bien lorsque le fichier d'entrée est présent, mais si le fichier d'entrée n'est pas là, il me donne cette erreur et complète:powershell if else ne fonctionne pas pour le côté autre

Get-Content : Cannot find path 'C:\scripts\importfile.txt' because it does not exist. 
At C:\Scripts\CLI_Localadmins.ps1:18 char:36 
+  If (!($FileExists)) {$Computers = Get-Content -Path 'c:\scripts\importfile.txt' 
+          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : ObjectNotFound: (C:\scripts\importfile.txt:String) [Get-Content], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand* 

c'est le code que je utilise:

#Check if import file exists. 
$ChkFile = "c:\scripts\importfile.txt" 
$ValidPath = Test-Path $ChkFile -IsValid 
If ($ValidPath -eq $True) {$Computers = Get-Content -Path 'c:\scripts\importfile.txt' 
}  
Else {$Computers = Get-QADComputer -SizeLimit 0 | select name -ExpandProperty name 
} 
# Give feedback that something is actually going on 
+1

Qu'est-ce que '$ env:' dans l'affectation de variable supposée faire? –

+0

Pouvez-vous mettre à jour le message d'erreur pour la dernière tentative? –

+0

Taylor Tvrdy Mis à jour le message d'erreur: Get-Content: Impossible de trouver path 'C: \ scripts \ importfile.txt' parce qu'il n'existe pas. À C: \ Scripts \ CLI_Localadmins.ps1: 17 char: 42 + If ($ ValidPath -eq $ True) {$ Computers = Obtenir-Content -Path 'c: \ scripts \ importfil ... + ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (C: \ scripts \ importfile.txt: String) [Get-Content], ItemNotFoundException + FullyQualifiedErrorId: PathNotFound, Microsoft.PowerShell.Commands.GetContentCommand traitement ... Scénario complet pour les systèmes en ligne – user2654059

Répondre

0

Le problème avec votre condition est que Test-Path $ChkFile -IsValid vérifie que si $ChkFile est un chemin valide, pas si elle existe réellement. Si vous voulez tester l'existence, vous devez supprimer -IsValid. De plus, je vous recommande d'utiliser -LiteralPath, car par défaut Test-Path traite le chemin comme une expression régulière, ce qui provoque des problèmes lorsqu'un chemin contient des caractères spéciaux tels que les crochets.

#Check if import file exists. 
$ChkFile = "c:\scripts\importfile.txt" 
if (Test-Path -LiteralPath $ChkFile) { 
    $Computers = Get-Content $ChkFile 
} else { 
    $Computers = Get-QADComputer -SizeLimit 0 | select -Expand name 
} 
3

le problème est dans l'instruction IF tel que décrit par l'instruction d'erreur .. Essayez de supprimer le point d'exclamation

+0

ok maintenant les travaux secondaires d'autre mais si côté ne fait pas! Si le fichier existe, il n'en obtient pas l'entrée. Il tire toujours des données de l'autre côté de la déclaration. – user2654059

+0

La valeur de $ FileExists est-elle différente dans chaque cas? –

+0

pas toujours le même – user2654059

0

J'ai trouvé ce website qui peut aider. Voici une citation de l'article, "An important warning about using the -isValid switch...since there’s nothing syntactically wrong with the path. So Test-Path -isValid $profile will always return true." je crois que le commutateur -isValid est en train de vérifier la syntaxe du chemin et en vous assurant qu'il est correct, il ne vérifie pas réellement si le chemin est là.

Essayez d'utiliser-chemin partagé au lieu de -isValid comme celui-ci

$ValidPath = Test-Path (split-path $ChkFile) 
Questions connexes