我有一个用 C# 编写的 PowerShell 模块,它使用实体框架来访问 MS SQL 服务器。在我的项目中,我创建了一个 module.psd1 文件。此文件指定在加载 dll 之前要运行的脚本 (LoadAppConfig.ps1)。该脚本读取 app.config 并将连接字符串添加到当前应用程序域。
有一个更好的方法吗?我知道有些模块在加载它们时可以接受参数,但我无法找到在 C# 中实现这一点的方法。或者,有没有办法在模块中嵌入默认值,可以通过 cmdlet 更改?如果可能的话,我想避免重新编译模块来更改数据源。
加载AppConfig.ps1
Add-Type -AssemblyName System.Configuration
$path = $PSScriptRoot
$configPath = Join-Path -Path $path -ChildPath "App.Config"
$connectionstrings = [System.Configuration.ConfigurationManager]::ConnectionStrings
$collection = [System.Configuration.ConfigurationElementCollection]
$field = $collection.GetField(
"bReadOnly",
[System.Reflection.BindingFlags]::NonPublic -bor [System.Reflection.BindingFlags]::Instance)
$field.SetValue($connectionstrings, $false)
[xml]$xml = gc $configPath
$name = $xml.configuration.connectionStrings.add.name
$newconnectionstring = $xml.configuration.connectionStrings.add.connectionString
$provider = "System.Data.EntityClient"
if ($connectionstrings.name -notcontains $name)
{
$Entities = [System.Configuration.ConnectionStringSettings]::new($name, $newconnectionstring, $provider)
$connectionstrings.add($Entities)
}