我有一个代码可以将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...
}
答案 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
参数,希望在适当的上下文中使用引用,那么将在全局名称空间中生成类型。