首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以指定在Powershell中使用New-Object的dll吗?

我可以指定在Powershell中使用New-Object的dll吗?
EN

Stack Overflow用户
提问于 2017-12-28 16:09:42
回答 2查看 1.1K关注 0票数 3

我有一个场景,我需要New-Object一个类型,但是有多个类型具有相同的名称和名称空间。当类型存在于多个地方时,我找不到New-Object是如何决定创建该类型的。可以具体说明吗?理想情况下,我希望将dll名称传递给New-Object,但似乎没有这样的选项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-28 17:10:18

指定完整的程序集-限定类型名称

代码语言:javascript
复制
New-Object -TypeName 'MyType, AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdef0123456789'

这也适用于类型文字:

代码语言:javascript
复制
[MyType,AssemblyName,Version=1.0.0.0,Culture=neutral,PublicKeyToken=abcdef0123456789]::new()

您可以使用AssemblyName.GetAssemblyName()轻松地从磁盘中获得程序集的完全限定名。

代码语言:javascript
复制
# Load the assembly
$AssemblyPath = '.\MyAssembly.dll'
Add-Type -Path $AssemblyPath

# Fetch the assembly's name
$AssemblyName = [System.Reflection.AssemblyName]::GetAssemblyName((Resolve-Path $AssemblyPath).Path)

# Construct full type name
$TypeName = 'MyType'
$AssemblyQualifiedTypeName = $TypeName,$AssemblyName -join ', '

# Instantiate and object of this type
$MyObject = New-Object -TypeName $TypeName
#or
$MyObject = ($TypeName -as [Type])::new()
票数 6
EN

Stack Overflow用户

发布于 2017-12-28 16:18:01

我想你可以试着用LoadFrom

代码语言:javascript
复制
[System.Reflection.Assembly]::LoadFrom(dllPath)

那么PS在使用New-Object FullyQualifiedType时应该首先检查它。

编辑:

或者,似乎有一个选项可以使用Add-Type指定DLL程序集:

https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/add-type?view=powershell-5.1

代码语言:javascript
复制
Add-Type -AssemblyName "yourAssembly" 

然后,该类型将在当前PowerShell会话中可用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48010715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档