2013-08-14 6 views
0

В этом простом скрипте if оператор работает нормально, когда входной файл присутствует, но если входной файл не существует она дает мне эту ошибку и завершает:PowerShell, если другое заявление не работает на еще сторону

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* 

это код, я использую:

#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

Что такое '$ env:' в присваивании переменных, которое должно выполняться? –

+0

Можете ли вы обновить сообщение об ошибке для последней попытки? –

+0

Taylor Tvrdy Обновлено сообщение об ошибке: Get-Content: Не удается найти путь «C: \ scripts \ importfile.txt», потому что его не существует. В C: \ Scripts \ CLI_Localadmins.ps1: 17 char: 42 + If ($ ValidPath -eq $ True) {$ Computers = Get-Content -Path 'c: \ scripts \ importfil ... + ~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (C: \ scripts \ importfile.txt: String) [Get-Content], ItemNotFoundException + FullyQualifiedErrorId: PathNotFound, Microsoft.PowerShell.Commands.GetContentCommand Обработка ... Сценарий завершен для онлайн-систем – user2654059

ответ

0

Проблема с вашим условием является то, что только Test-Path $ChkFile -IsValid проверяет $ChkFile является правильным путем, а не если он на самом деле существует. Если вы хотите проверить существование, вам необходимо удалить -IsValid. Кроме того, я бы рекомендовал использовать -LiteralPath, потому что по умолчанию Test-Path рассматривает путь как регулярное выражение, что вызывает проблемы, когда путь содержит специальные символы, такие как квадратные скобки.

#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

проблема заключается в операторе IF, как описано в инструкции об ошибке .. Попробуйте удалить восклицательный знак

+0

ОК, теперь сторона else работает, но сторонняя сторона этого не делает! если файл существует, он не получает от него вход. Он по-прежнему извлекает данные из другой стороны инструкции. – user2654059

+0

Является ли значение $ FileExists разным в каждом случае? –

+0

не всегда то же самое – user2654059

0

Я нашел это website, что может помочь. Вот цитата из статьи: "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." Я верю, что переключатель -isValid просто проверяет синтаксис пути и убедился, что он правильный, на самом деле он не проверяет, существует ли путь.

Попробуйте использовать сплит-путь вместо -isValid как этого

$ValidPath = Test-Path (split-path $ChkFile) 
Смежные вопросы