如何在Powershell二进制模块中配置Changable连接字符串?

时间:2017-06-30 13:21:19

标签: c# entity-framework powershell powershell-module

我有一个用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)
}

0 个答案:

没有答案