我有一個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中的模塊的進口?
我認爲你應該設計你的模塊的方式,它總是有效的,所以不需要取消導入模塊。你的根本問題是什麼? –
你有什麼建議?唯一想到的是爲用戶提供cmdlet來設置變量本身的值。 – Jake
這取決於你的需求。但是,如果你有一個函數,例如執行sql查詢,我會給該函數一個包含連接信息的數據庫上下文對象(例如散列表),並將其傳遞給每個函數調用,而不是訪問包含這些信息的模塊範圍變量 –