在多个脚本中使用 Add-Type

using Add-Type in multiple scripts

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

我正在做的事的例子:

function Backup-Database
{
    $pathSMO = "C:\Program Files\Microsoft SQL Server0\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"
    $pathSMOEx = "C:\Program Files\Microsoft SQL Server0\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 Server0\SDK\Assemblies\Microsoft.SqlServer.Smo.dll"
    $pathSMOEx = "C:\Program Files\Microsoft SQL Server0\SDK\Assemblies\Microsoft.SqlServer.SmoExtended.dll"
    #imports
    Add-Type -path $pathSMO
    Add-Type -path $pathSMOEx

    #other stuff...
}

请原谅我是否有偏差,但您应该能够将类型声明移到函数之上,并且仍然可以在函数中访问它。来自 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 参数,则希望在适当的上下文中使用引号,然后 在全局命名空间中生成类型。