在多个脚本中使用Add-Type

时间:2015-02-24 12:54:21

标签: powershell smo

我有一个代码可以将dll导入我的脚本。但我正在我使用这个DLL的每个脚本中复制这部分代码。我认为这不是一个好习惯。这里避免代码复制的好习惯是什么。

我在做什么的例子:

function Backup-Database
{
    $pathSMO = "C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"
    $pathSMOEx = "C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll"
    #imports
    Add-Type -path $pathSMO
    Add-Type -path $pathSMOEx

    #other stuff...
}

function Restore-Database
{
    $pathSMO = "C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"
    $pathSMOEx = "C:\Program Files\Microsoft SQL Server\110\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll"
    #imports
    Add-Type -path $pathSMO
    Add-Type -path $pathSMOEx

    #other stuff...
}

1 个答案:

答案 0 :(得分:1)

请原谅我,如果我不在基地,但你应该能够将类型声明移到函数上方,并且仍然可以在函数内访问它。从TechNet for Add-Type

标准化示例1
$source = @"
public class BasicTest
{
  public static int Add(int a, int b)
    {
        return (a + b);
    }
  public int Multiply(int a, int b)
    {
    return (a * b);
    }
}
"@

Add-Type -TypeDefinition $source

function test1{
    [BasicTest]::Add(4, 3)
}

Function test2{
    $basicTestObject = New-Object BasicTest
    $basicTestObject.Multiply(5, 2)
}

test1

test2 

上述代码的输出

7
10

正如您所看到的,定义不在函数之内。如果省略-NameSpace参数,希望在适当的上下文中使用引用,那么将在全局名称空间中生成类型。