在多个脚本中使用 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
参数,则希望在适当的上下文中使用引号,然后 在全局命名空间中生成类型。
我有一个代码可以将 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
参数,则希望在适当的上下文中使用引号,然后 在全局命名空间中生成类型。