如何捕获使用powershell删除Web部件时发生的错误?

如何捕获使用powershell删除Web部件时发生的错误?,powershell,sharepoint-2010,Powershell,Sharepoint 2010,在我的sharepoint powershell脚本中: 我正在收回该Web部件,然后删除该Web部件,然后添加(并部署它)。 当我收回它时,我必须等到它完成后才能继续。我正在做一个无限循环,我想捕捉错误。如果有错误,请等待,然后重试;如果没有错误,请中断并继续。问题是try-catch没有捕获错误。(关于当有一个持续的过程时,你不能做出改变) 有人知道如何解决这个问题吗 谢谢 function RETRACT() { ./retractwebpart.ps1 } function R

在我的sharepoint powershell脚本中: 我正在收回该Web部件,然后删除该Web部件,然后添加(并部署它)。 当我收回它时,我必须等到它完成后才能继续。我正在做一个无限循环,我想捕捉错误。如果有错误,请等待,然后重试;如果没有错误,请中断并继续。问题是try-catch没有捕获错误。(关于当有一个持续的过程时,你不能做出改变)

有人知道如何解决这个问题吗

谢谢

function RETRACT()
{
    ./retractwebpart.ps1
}

function REMOVE()
{
    ./removewebpart.ps1
}

function ADD()
{
    ./addwebpart.ps1
}




RETRACT

do
{
    try 
    {
        REMOVE -ErrorAction Stop
        Break
    }
    Catch [System.Exception] 
    {
        Start-Sleep -m 1000
    }
}
while ($true)

do
{
    try 
    {
        ADD -ErrorAction Stop
        Break
    }
    Catch [System.Exception] 
    {
        Start-Sleep -m 1000
    }
}
while ($true)
缩回文件

# Retracting the solution from web application http://mydomain
Write-Host "Retracting the solution from web application http://mydomain..."
Uninstall-SPSolution –Identity PDFLibrary.wsp –WebApplication http://mydomain -confirm:$false -ErrorAction Stop
删除文件

# Removing the solution from web application http://mydomain
Write-Host "Removing the solution from web application http://mydomain..."
Remove-SPSolution –Identity PDFLibrary.wsp -confirm:$false -ErrorAction Stop
添加文件

# Adding the solution to SharePoint
Write-Host "Adding the solution to SharePoint..."
Add-SPSolution C:/PDFLibrary/PDFLibrary.wsp

# Deploying the solution to web application http://mydomain
Write-Host "Deploying the solution to web application http://mydomain..."
Install-SPSolution –Identity PDFLibrary.wsp –WebApplication http://mydomain –GACDeployment

我试图复制你的问题,并尝试了一下。这次我删除了
-ErrorAction Stop
,它仍然进入
Catch
块。诀窍可能是我认为是将Catch[System.Exception]块放在适当的位置(不确定,因为在尝试3中我删除了
-ErrorAction
[System.Exception]
但它仍然进入了Catch块。正如Hyper Anthony在注释
中所建议的那样,所有命令都支持ErrorAction Stop
,因此它应该可以工作。以下函数中的脚本故意抛出错误以测试逻辑。我认为您的RETRACT函数抛出错误

尝试1-无错误-操作

Function Remove
{
 C:\scripts\so\DeletedFiles.ps1 
}
try
{
 Remove
}
Catch [System.Exception]{
Write-Host "Unhandled Exception occurred"
}
它可以很好地落在挡块上

尝试2带-错误操作停止

Function Remove
{
 C:\scripts\so\DeleteFiles.ps1 
}
try
{
 Remove -ErroAction Stop
}
Catch [System.Exception]{
Write-Host "Unhandled Exception occurred"
}
它工作良好,落在挡块上

尝试3

Function Remove
{
 C:\scripts\so\DeletedFiles.ps1 
}
try
{
 Remove
}
Catch{
Write-Host "Unhandled Exception occurred"
}
它仍然工作,并降落到捕捉块中


在所有这些尝试之后,我相信您的
RETRACT
函数抛出的错误超出了try-catch块。

我尝试复制您的问题并尝试了一次。这次我删除了
-ErrorAction Stop
,它仍然进入了
catch
块。我想的诀窍可能是有catch[System.Exception]块就位(不确定,因为在尝试3中我删除了
-ErrorAction
[System.Exception]
但它仍然进入了Catch块。正如Hyper Anthony在注释
中所建议的那样,所有命令都支持ErrorAction Stop
,因此它应该可以工作。以下函数中的脚本故意抛出错误以测试逻辑。我认为您的RETRACT函数抛出错误

尝试1-无错误-操作

Function Remove
{
 C:\scripts\so\DeletedFiles.ps1 
}
try
{
 Remove
}
Catch [System.Exception]{
Write-Host "Unhandled Exception occurred"
}
它可以很好地落在挡块上

尝试2带-错误操作停止

Function Remove
{
 C:\scripts\so\DeleteFiles.ps1 
}
try
{
 Remove -ErroAction Stop
}
Catch [System.Exception]{
Write-Host "Unhandled Exception occurred"
}
它工作良好,落在挡块上

尝试3

Function Remove
{
 C:\scripts\so\DeletedFiles.ps1 
}
try
{
 Remove
}
Catch{
Write-Host "Unhandled Exception occurred"
}
它仍然工作,并降落到捕捉块中



在所有这些尝试之后,我相信您的
RETRACT
函数正在抛出超出try-catch块的错误。

检查此项,我可以将`-ErrorAction Stop`附加到哪里?我尝试了
REMOVE-ErrorAction Stop
,但我得到了相同的结果…您得到的错误是什么?这是您尝试时得到的一般错误在未收回的情况下删除某个对象。问题是该对象未进入捕捉块。请检查我下面的答案。检查此选项,我可以在何处附加“-ErrorAction Stop”?我尝试了
remove-ErrorAction Stop
,但我得到了相同的结果…您得到的错误是什么?这是您在尝试删除某个对象时遇到的一般错误n它没有被收回。问题是它没有进入catch块。请检查下面的答案。我更新了上面的代码。实际上,我在REMOVE函数导入文件中有一个print语句。它被打印出来,因此它在崩溃时正在执行REMOVE函数。可能是如果你发布更多关于函数的详细信息,它会有所帮助。好的,我把c当我运行脚本时,我得到了关于收回的print语句,然后就在我得到了关于删除的print语句之后(
“从web应用程序中删除解决方案”)http://mydomain...“
)。然后我收到红色错误消息。现在它工作了。我将错误操作停止在导入文件的函数中。很好。与此同时,我也在研究powershell的陷阱函数。它也做类似的事情。如果它解决了您的问题,请将其标记为答案。我更新了上面的代码。我实际上在删除函数中有一个print语句导入文件。它会被打印出来,所以当它崩溃时它会执行remove函数。可能是如果你发布更多关于函数的详细信息,它会有所帮助。好的,我把三个文件的内容放在上面。当我运行脚本时,我会得到关于收回的print语句,然后在我得到关于删除的print语句之后(
“从web应用程序中删除解决方案http://mydomain...“
)。然后我收到红色错误消息。现在它工作了。我将错误操作停止在导入文件中的函数中。很好。与此同时,我也在研究powershell的陷阱函数。它也有类似的功能。如果它解决了您的问题,请将其标记为“答案”。