我是PowerShell的新手。我有一段代码可以检查文件夹“ ilalog”是否存在。第一次运行该脚本时,它正在检查文件夹“ ilalog”,如果不存在,则说明正在创建。当我第二次运行脚本时。我收到以下错误:
具有指定名称D:\ Temp \ ilalog的项目已存在 “ FullyQualifiedErrorId: DirectoryExist,Microsoft.PowerShell.Commands.NewItemCommand”。
如何处理此异常
我尝试使用try和Catch块
$rgflder="ilalog"
[bool]$checkrg=Test-Path D:\Gdump\$rgfolder -PathType Any
if ( $checkrg -eq $False)
{
try{
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
}
catch [System.IO.IOException]
{
if ($_.CategoryInfo.Category -eq $resExistErr) {Write-host "Dir Exist"}
}
}
else
{
Write-Output "Directory Exists"
}
答案 0 :(得分:0)
如果要在基于错误类型采取措施的同时继续处理脚本,一种简单的方法是仅检查$error
变量。也可以使用陷阱。
$error.clear()
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory"
if ($error[0].Exception.GetType().Fullname -eq 'System.IO.IOException') {
"Dir Exists"
}
else {
"Dir was created"
}
如果要使用try-catch,则需要将非终止错误视为终止错误以激活catch块。您可以使用-ErrorAction Stop
来做到这一点。
try {
New-Item -Path "D:\Gdump" -Name "$rgflder" -ItemType "directory" -ErrorAction Stop
}
catch [System.IO.IOException]
{
"Exception caught!"
}
或者,您可以通过设置$ErrorActionPreference = 'Stop'
来在会话中进行管理,该设置将应用于该会话中的所有命令。
请记住,传递给-ErrorAction
的值将覆盖$ErrorActionPreference
中的设置。同样,错误操作设置对终止错误没有影响。因此,您不能期望设置-ErrorAction Continue
并让代码继续处理终止错误。
许多命令返回的对象可能会或可能不会终止错误。您将明确找到更多成功的地方,并指定何时要抛出终止错误。
您可以在About Common Parameters上了解有关错误操作首选项的更多信息。我实际上喜欢Everything About Exceptions在PowerShell中进行异常处理。
答案 1 :(得分:0)
为什么不简单地像下面这样?
$rgflder="ilalog"
# combine the path and foldername
$rgPath = Join-Path -Path 'D:\Gdump' -ChildPath $rgflder
# test if the folder already exists
if (Test-Path $rgPath -PathType Container) {
Write-Output "Directory Exists"
}
else {
# if not, create the new folder
try {
$null = New-Item -Path $rgPath -ItemType Directory -ErrorAction Stop
Write-Output "Created directory '$rgPath'"
}
catch {
# something terrible happened..
Write-Error "Error creating folder '$rgPath': $($_.Exception.Message)"
}
}