说我有一个脚本。$result = convertDoc(source, dest)可能有
DAOpenDocument("c:\docs\test.xlsx") 失败:当前没有打开文件 (0x0010)
失败,或者成功:
EX_CALLBACK_ID_PAGECOUNT:文件有 1 页。
导出成功:创建了 1 个输出文件。
我需要创建一个逻辑,如果 $result 在字符串中有关键字“失败”然后Write-Host失败,否则$result有关键字“导出成功”然后写入主机“成功”
说我有一个脚本。$result = convertDoc(source, dest)可能有
DAOpenDocument("c:\docs\test.xlsx") 失败:当前没有打开文件 (0x0010)
失败,或者成功:
EX_CALLBACK_ID_PAGECOUNT:文件有 1 页。
导出成功:创建了 1 个输出文件。
我需要创建一个逻辑,如果 $result 在字符串中有关键字“失败”然后Write-Host失败,否则$result有关键字“导出成功”然后写入主机“成功”
尝试这样的事情:
$result | Select-String '(failed|export successful)' | % {
if ($_.Matches.Groups[1].Value -eq 'failed') {
Write-Host 'failed'
} else {
Write-Host 'successful'
}
}
请注意,这$_.Matches.Groups[1]需要 PowerShell v3。在早期版本中,您必须先扩展组,然后才能访问它们:
$value = ($_.Matches | select -Expand Groups)[1].Value
也就是说,你有控制权convertDoc()吗?如果是这样,最好让该函数在没有文档打开时抛出异常并在try..catch块中调用它:
try {
$result = convertDoc(source, dest)
} catch {
Write-host $_.Exception.Message
}
在 $result 上使用模式匹配。选项是-match、-contains、-like 运算符。例如 If ($result -match "failed") { write-host "failed" } else { write-host "mission sucess" }
为什么不是这个?
$result = 'DAOpenDocument("c:\docs\test.xlsx") failed: no file is currently open (0x0010)'
if($result.contains("failed"))
{ Write-Host "Failure" }
elseif($result.contains("successful"))
{write-host "Success!"}
else
{Write-Host "All is good"}