0

在这个简单的脚本中,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 
4

3 回答 3

3

问题出在 IF 语句中,如错误语句所述。尝试删除感叹号

于 2013-08-14T15:29:09.387 回答
0

我发现这个网站可能会有所帮助。这是文章的引用,"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)
于 2013-08-15T14:17:15.710 回答
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
}
于 2013-08-19T14:48:08.607 回答