powershell if else语句不适用于else端

powershell if else语句不适用于else端,powershell,if-statement,Powershell,If Statement,在这个简单的脚本中,当输入文件存在时,if语句可以正常工作,但如果输入文件不存在,则会出现此错误并完成: 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:\scri

在这个简单的脚本中,当输入文件存在时,if语句可以正常工作,但如果输入文件不存在,则会出现此错误并完成:

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 

问题出在错误语句描述的IF语句中。。尝试删除感叹号

问题出在错误语句描述的IF语句中。。尝试删除感叹号

我发现这可能会有所帮助。这里引用了文章中的一段话,这是关于使用-isValid开关的一个重要警告…因为路径在语法上没有任何错误。所以testpath-isValid$profile将始终返回true。我相信-isValid开关只是检查路径的语法并确保它是正确的,它实际上并不检查路径是否存在

尝试使用拆分路径,而不是像这样使用-isValid

$ValidPath = Test-Path (split-path $ChkFile)
我发现这个可能有用。这里引用了文章中的一段话,这是关于使用-isValid开关的一个重要警告…因为路径在语法上没有任何错误。所以testpath-isValid$profile将始终返回true。我相信-isValid开关只是检查路径的语法并确保它是正确的,它实际上并不检查路径是否存在

尝试使用拆分路径,而不是像这样使用-isValid

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

您的条件的问题是,测试路径$ChkFile-IsValid仅在$ChkFile是有效路径时检查,而不是在它实际存在时检查。如果要测试是否存在,需要删除-IsValid。另外,我建议使用-LiteralPath,因为默认情况下,测试路径将路径视为正则表达式,当路径包含方括号之类的特殊字符时,这会导致问题

#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
}

您的条件的问题是,测试路径$ChkFile-IsValid仅在$ChkFile是有效路径时检查,而不是在它实际存在时检查。如果要测试是否存在,需要删除-IsValid。另外,我建议使用-LiteralPath,因为默认情况下,测试路径将路径视为正则表达式,当路径包含方括号之类的特殊字符时,这会导致问题

#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
}

好的,现在else端工作,但是if端不工作!如果文件存在,则不会从中获取输入。它仍然从语句的else端提取数据。在每种情况下$FileExists的值是否不同?那么问题在于测试文件是否存在的方式将输入检查更改为:检查导入文件是否存在$ChkFile=c:\scripts\importfile.txt$ValidPath=测试路径$ChkFile-如果$ValidPath-eq$True{$Computers=Get Content-Path'c:\scripts\importfile.txt'}否则{$Computers=Get QADComputer-SizeLimit 0 |选择名称-ExpandProperty名称}给出反馈,说明实际正在进行的操作仍然可以与输入文件一起使用,但不会转到其他文件statement@user2654059请不要在评论中发布代码。正如你所看到的,它实际上是不可读的。改为更新您的问题。好,现在else端工作,if端不工作!如果文件存在,则不会从中获取输入。它仍然从语句的else端提取数据。在每种情况下$FileExists的值是否不同?那么问题在于测试文件是否存在的方式将输入检查更改为:检查导入文件是否存在$ChkFile=c:\scripts\importfile.txt$ValidPath=测试路径$ChkFile-如果$ValidPath-eq$True{$Computers=Get Content-Path'c:\scripts\importfile.txt'}否则{$Computers=Get QADComputer-SizeLimit 0 |选择名称-ExpandProperty名称}给出反馈,说明实际正在进行的操作仍然可以与输入文件一起使用,但不会转到其他文件statement@user2654059请不要在评论中发布代码。正如你所看到的,它实际上是不可读的。请改为更新您的问题。变量赋值中的$env:应该做什么?能否更新最新尝试的错误消息?Taylor Tvrdy更新的错误消息:获取内容:找不到路径“C:\scripts\importfile.txt”,因为它不存在。在C:\Scripts\CLI_Localadmins.ps1:17字符:42+如果$ValidPath-eq$True{$Computers=Get Content-Path'C:\Scripts\importfil…+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~类别信息:ObjectNotFound:C:\Scripts\importfile.txt:String[Get Content],ItemNotFoundException+FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand处理…联机系统脚本已完成变量赋值中的$env:应该执行什么操作?能否更新最新尝试的错误消息?Taylor Tvrdy更新的错误消息:获取内容:找不到路径“C:\scrip”ts\importfile.txt'因为它不存在。在C:\Scripts\CLI\u Localadmins.ps1:17字符:42+如果$ValidPath-eq$True{$Computers=Get Content-Path'C:\Scripts\importfile…+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+CategoryInfo:ObjectNotFound:C:\Scripts\importfile.txt:String[获取内容] ,ItemNotFoundException+FullyQualifiedErrorId:PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand处理。。。联机系统的脚本已完成