如果发生错误,如何取消导入模块?

时间:2015-09-17 07:54:23

标签: powershell

我有一个PowerShell模块,可以设置5个带模块范围的变量,如下所示:

Set-Variable DatabaseName     -Option Constant -Value "DbName"
Set-Variable DomainName       -Option Constant -Value "DomainName"
Set-Variable ServerInstance   -Option Constant -Value "Server\Instance"
Set-Variable Server           -Option ReadOnly -Value (New-Object Microsoft.SqlServer.Management.Smo.Server $ServerInstance)
Set-Variable Database         -Option ReadOnly -Value ($Server.Databases[$DatabaseName])

如果没有正确设置这些变量,整个模块基本上都会崩溃,什么都不会起作用。

我可以检查变量的唯一方法是设置属性是检查$Database是否为空。但是这段代码:

if ($Database -eq $null) { Write-Error 'Variables not set.' Remove-Module ModuleName }

不起作用,因为模块尚未完成导入。

使用throw关键字给出了这个错误,但这并没有真正解释出现了什么问题:

import-module : The module to process 'Module.psm1', listed in
field 'ModuleToProcess/RootModule' of module manifest 'C:\Users\Me\My Documents\WindowsPowerShell\Modules\Module\Module.psd1' was not
processed because no valid module was found in any module directory.
At line:1 char:1
+ import-module Module
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ResourceUnavailable: (Module:String) [Import-Module], PSInvalidOperationException
    + FullyQualifiedErrorId : Modules_ModuleFileNotFound,Microsoft.PowerShell.Commands.ImportModuleCommand

在PowerShell中中止导入模块的“正确”方法是什么?

1 个答案:

答案 0 :(得分:1)

您不应该使用try/catch功能吗?

Try
{
    // DO your import
}
Catch
{
    $ErrorMessage = $_.Exception.Message
    $FailedItem = $_.Exception.ItemName
    Break
}