我有一个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中中止导入模块的“正确”方法是什么?
答案 0 :(得分:1)
您不应该使用try/catch
功能吗?
Try
{
// DO your import
}
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Break
}