我在powershell中使用以下类型:
Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
我创建对象,传递它们,从cmdlet返回它们。以下是一个例子:
Import-Module SQLPS
function New-SQLSMORelocateFile {
[CmdletBinding()]
param (
[Parameter(Mandatory=$true, Position=0)]
[ValidateNotNullOrEmpty()]
[string] $logicalName,
[Parameter(Mandatory=$true, Position=1)]
[ValidateNotNullOrEmpty()]
[string] $physicalName
)
New-Object "Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" `
-ArgumentList $logicalName, $physicalName
}
我想将此值传递到另一个PowerShell cmdlet,如下所示:
function Restore-SQLDatabaseFromDisk {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$false)]
[Microsoft.SqlServer.Management.Smo.RelocateFile] $overrideDataFile
)
# Do stuff
}
但是当我这样做时,我得到以下有用的错误:
PSInvalidCastException:无法转换 " Microsoft.SqlServer.Management.Smo.RelocateFile"类型的价值 " Microsoft.SqlServer.Management.Smo.Re locateFile"输入 " Microsoft.SqlServer.Management.Smo.RelocateFile&#34 ;. ArgumentTransformationMetadataException:无法转换" Microsoft.SqlServer.Management.Smo.RelocateFile"类型的价值 " Microsoft.SqlServer。 Management.Smo.RelocateFile"输入 " Microsoft.SqlServer.Management.Smo.RelocateFile&#34 ;. ParameterBindingArgumentTransformationException:无法处理参数' overrideDataFile'的参数转换。不能 转换" Micr osoft.SqlServer.Management.Smo.RelocateFile"值 类型" Microsoft.SqlServer.Management.Smo.RelocateFile"输入 " Microsoft.SqlServer.Management.Smo.RelocateFile"
我之前见过这个;它是因为加载了#34; RelocateFile"版本与我的New-SQLSMORelocateFile()返回的版本不匹配(这是SQLPS Restore-SqlDatabase
cmdlet所必需的。)
每当我使用" RelocateFile"键入我的模块,总是需要是" Microsoft.SqlServer.Management.Smo.RelocateFile,Microsoft.SqlServer.SmoExtended,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = 89845dcd8080cc91"输入,而不是SQLPS加载的默认值。
是否有一个Powershell等同于C#"使用"指令来覆盖模块中类型的行为,如下所示:?
https://msdn.microsoft.com/en-us/library/sf0df423.aspx
与第3个例子中一样:using Project = PC.MyCompany.Project;
或者,有没有办法可以定义参数类型的特定版本,如下所示:
function Restore-SQLDatabaseFromDisk {
[CmdletBinding()]
Param (
[Parameter(Mandatory=$false)]
["Microsoft.SqlServer.Management.Smo.RelocateFile, Microsoft.SqlServer.SmoExtended, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"] $overrideDataFile
)
# Do stuff
}
上述情况显然会产生语法错误,但我无法想出办法或找到方法。
答案 0 :(得分:1)
类型文字语法允许完全限定的类型名称,只需执行:
while (reader.Read())