在这个简单的脚本中,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
答案 0 :(得分:3)
问题出在IF语句中,如错误语句所述。尝试删除感叹号
答案 1 :(得分: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开关只是检查路径的语法并确保它是正确的,它实际上并不检查路径是否存在。
尝试使用split-path而不是像这样的-isValid
$ValidPath = Test-Path (split-path $ChkFile)
答案 2 :(得分: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
}