【问题标题】:using Add-Type in multiple scripts在多个脚本中使用 Add-Type
【发布时间】:2015-02-24 12:54:20
【问题描述】:

我有一个代码可以将 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...
}

【问题讨论】:

    标签: powershell smo


    【解决方案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 参数被省略,那么希望在适当的上下文中使用引号,然后在全局命名空间中生成类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-01
      • 2019-11-28
      • 1970-01-01
      相关资源
      最近更新 更多