在使用任务活动角色查询活动目录时,无法捕获PowerShell脚本中的错误

时间:2014-01-06 13:05:12

标签: powershell scripting active-directory

我有一个脚本,它返回AD中计算机列表的位置。这适用于我当前的域,如果我指定“-searchroot”,它适用于其他域。

如果我查询的计算机不在正确的域上,使用'get-qadcomputer'它不会向控制台返回任何信息,那么需要一种方法来捕获并尝试替代方案吗?

我试过这个,它适用于DC = Domain1(我当前的域)中的所有计算机:

Add-PSSnapin Quest.ActiveRoles.ADManagement
$strPath = "C:\sample.xlsx"

$objExcel = new-object -ComObject Excel.Application
$objExcel.Visible = $false
$WorkBook = $objExcel.Workbooks.Open($strPath)
$worksheetIn = $workbook.sheets.item("Asset")
$worksheetOut = $workbook.sheets.item("Asset")
$intRowMax =  ($worksheetIn.UsedRange.Rows).count
$Columnnumber = 1

For($intRow = 2 ; $intRow -le $intRowMax ; $intRow++) {
Try 
{
$name = $worksheetIn.cells.item($intRow,$ColumnNumber).value2
"Querying $name...$introw of $intRowMax" 
$OU = Get-QADcomputer -searchroot 'OU=Workstations,DC=DOMAIN1'-LdapFilter "(CN=$Name)"`
| ft Location -HideTableHeaders
$Out = Format-list -InputObject $OU | out-string
$worksheetOut.cells.item($intRow,6) = "$Out"
    }
Catch
    {
$name = $worksheetIn.cells.item($intRow,$ColumnNumber)
"Querying $name...$introw of $intRowMax" 
$OU = Get-QADComputer -SearchRoot 'OU=Workstations,DC=DOMAIN2' -LdapFilter (CN=$Name)"`
| ft Location -HideTableHeaders
$Out = Format-list -InputObject $OU | out-string
$worksheetOut.cells.item($intRow,6) = "$Out"
    }
}
$objexcel.save()
$objExcel.workbooks.close()
$objexcel.application.quit()
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($Workbook)
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($objExcel)
Remove-Variable objExcel

1 个答案:

答案 0 :(得分:0)

您可以检查$OU是否等于$null。我怀疑如果没有错误文本或者它没有带你到catch处理程序,它就找不到任何东西。另一个选择是在调用$?的行之后立即检查Get-QADComputer,但我怀疑你会得到True(命令成功)。但如果你得到假,那就告诉你它没有成功。