当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] PowerShell 路径和错误

作者:精品下载站 日期:2024-12-14 07:56:31 浏览:14 分类:玩电脑

PowerShell 路径和错误


[玩转系统] PowerShell 路径和错误

然而,还有另一种情况可能会很棘手,这是前几天提出的一个问题。如何为找不到文件的情况创建终止异常?

例如,您可以尝试这样的代码:

Try {
    Test-Path Foo:\Bar.txt -ErrorAction Stop
}
Catch {
    Write-Warning "I failed"
}

当你运行这段代码时,你会得到 False。 Catch 块中的代码永远不会执行。这是因为 Test-Path cmdlet 将布尔值 (True/False) 写入管道。如果文件或路径不存在,则不是错误。虽然。你可以把它变成一个。这是前面代码的变体。

$path = "Foo:\Bar.txt"
Try {
    if (-Not (Test-Path $path)) {
        Throw "Failed to find the $path"
    }
}
Catch {
    Write-Warning "I caught an exception"
    $_
}

这有效。

[玩转系统] PowerShell 路径和错误

就我个人而言,我会使用一个简单的 If 语句。但显然我无法谈论每个人的用例。

但也许您可以考虑使用不同的 cmdlet,而不是使用 Test-Path。

$path = "Foo:\Bar.txt"
Try {
    Resolve-Path -Path $path -ErrorAction Stop
}
Catch {
    Write-Warning "I caught an exception"
    $_
}

Resolve-Path 旨在解析路径中的通配符。如果路径不存在,cmdlet 将生成异常。在我的 Try/Catch 块中,我强制它终止。

[玩转系统] PowerShell 路径和错误

顺便说一句,您也可以使用 Convert-Path。需要注意的一件事是,这些 cmdlet 会将对象写入管道,这可能正是您所需要的。您可能需要将路径转换或解析为真实的文件系统路径,以便对其运行一些非 PowerShell 命令。

$path = "$env:windir\notepad.exe"
Try {
    $rPath = Resolve-Path -Path $path -ErrorAction Stop
}
Catch {
    Write-Warning "I caught an exception"
    $_
}
Write-Host "Using $rPath" -ForegroundColor green

[玩转系统] PowerShell 路径和错误

一种文件选项是使用 Get-Item。

$path = "Foo:\Bar.txt"
Try {
   [void](Get-Item -Path $path -ErrorAction Stop)
}
Catch {
    Write-Warning "I caught an exception"
    $_
}

在这种情况下,我不需要实际的文件对象,因此我将命令的结果转换为空。

[玩转系统] PowerShell 路径和错误

我不会告诉你这些技术中的任何一种都比另一种更好。这确实取决于脚本项目的总体需求。我鼓励您阅读完整的 cmdlet 帮助和我在此处显示的命令的示例。可能还有其他参数可以帮助您微调测试和错误处理。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯