我有一个用C#编写的PowerShell模块,它使用Entity Framework访问MS SQL服务器。在我的项目中,我创建了一个module.psd1文件。此文件指定在加载dll之前运行的脚本(LoadAppConfig.ps1)。该脚本读取app.config并将连接字符串添加到当前应用程序域。
有更好的方法吗?我知道有些模块可以在加载时获取参数,但我还没有找到一种方法在C#中实现它。或者,有没有办法在模块中嵌入一个默认值,可以通过cmdlet更改?我想避免在可能的情况下重新编译模块以更改数据源。
LoadAppConfig.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)
}