C# PowerShell.NET对象缺少方法
我在PowerShell中使用IO.Compression命名空间,遇到了一个问题,即在我的C#代码中可用的方法在PowerShell中不可用 C#代码段 PowerShell中类似的代码开头C# PowerShell.NET对象缺少方法,c#,.net,powershell,C#,.net,Powershell,我在PowerShell中使用IO.Compression命名空间,遇到了一个问题,即在我的C#代码中可用的方法在PowerShell中不可用 C#代码段 PowerShell中类似的代码开头 Add-Type -assembly System.IO.Compression.FileSystem $archfile = "c:\temp\a1.zip" # open mode: 1: Create, 2: Update $archive = [System.IO.Compression.ZipF
Add-Type -assembly System.IO.Compression.FileSystem
$archfile = "c:\temp\a1.zip"
# open mode: 1: Create, 2: Update
$archive = [System.IO.Compression.ZipFile]::Open("C:\temp\2.zip", 2)
$archive.CreateEntryFromFile($source, "myfolder\folder2\file.log")
查看成员后,发现缺少CreateEntryFromFile()函数(以及其他函数)。变量是ZipArchive的一种类型,将创建一个新文件。$archive |获取成员
显示:
TypeName: System.IO.Compression.ZipArchive
Name MemberType Definition
---- ---------- ----------
CreateEntry Method System.IO.Compression.ZipArchiveEntry CreateEntry(string entryName), System.IO.Compression.ZipArchiveE...
Dispose Method void Dispose(), void IDisposable.Dispose()
Equals Method bool Equals(System.Object obj)
GetEntry Method System.IO.Compression.ZipArchiveEntry GetEntry(string entryName)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
Entries Property System.Collections.ObjectModel.ReadOnlyCollection[System.IO.Compression.ZipArchiveEntry] Entries {get;}
Mode Property System.IO.Compression.ZipArchiveMode Mode {get;}
这只是PowerShell创建.NET对象的一部分吗?并非所有方法都受支持(或可以支持)
ZipArchive引用:
CreateEntryFromFile
是一个扩展方法,因此它不会出现在Powershell中的ZipArchive
类中
Add-Type -AssemblyName System.IO.Compression.FileSystem
Update-TypeData -TypeName System.IO.Compression.ZipArchive -MemberType
ScriptMethod -MemberName CreateEntryFromFile -Value {
switch ($args.Count)
{
2 { [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($this, $args[0], $args[1]) }
3 { [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($this, $args[0], $args[1], $args[2]) }
default { throw "No overload for CreateEntryFromFile takes the specified number of parameters." }
}
}
$archfile = "c:\temp\a1.zip"
# open mode: 1: Create, 2: Update
$archive = [System.IO.Compression.ZipFile]::Open("C:\temp\2.zip", 2)
$archive.CreateEntryFromFile($source, "myfolder\folder2\file.log")
选择1
在Powershell 3.0或更高版本中,可以声明在Powershell中使用的扩展方法
Add-Type -AssemblyName System.IO.Compression.FileSystem
Update-TypeData -TypeName System.IO.Compression.ZipArchive -MemberType
ScriptMethod -MemberName CreateEntryFromFile -Value {
switch ($args.Count)
{
2 { [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($this, $args[0], $args[1]) }
3 { [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($this, $args[0], $args[1], $args[2]) }
default { throw "No overload for CreateEntryFromFile takes the specified number of parameters." }
}
}
$archfile = "c:\temp\a1.zip"
# open mode: 1: Create, 2: Update
$archive = [System.IO.Compression.ZipFile]::Open("C:\temp\2.zip", 2)
$archive.CreateEntryFromFile($source, "myfolder\folder2\file.log")
选择2
只需将扩展方法用作普通的静态方法
$archfile = "c:\temp\a1.zip"
# open mode: 1: Create, 2: Update
$archive = [System.IO.Compression.ZipFile]::Open("C:\temp\2.zip", 2)
[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($archive, $source, "myfolder\folder2\file.log")
第二个选项是更少的代码,也适用于较旧版本的Powershell
Add-Type -AssemblyName System.IO.Compression.FileSystem
Update-TypeData -TypeName System.IO.Compression.ZipArchive -MemberType
ScriptMethod -MemberName CreateEntryFromFile -Value {
switch ($args.Count)
{
2 { [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($this, $args[0], $args[1]) }
3 { [System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($this, $args[0], $args[1], $args[2]) }
default { throw "No overload for CreateEntryFromFile takes the specified number of parameters." }
}
}
$archfile = "c:\temp\a1.zip"
# open mode: 1: Create, 2: Update
$archive = [System.IO.Compression.ZipFile]::Open("C:\temp\2.zip", 2)
$archive.CreateEntryFromFile($source, "myfolder\folder2\file.log")
参考资料:可能是因为它使用了一些较旧的.NET版本吗?请参阅
CreateEntryFromFile
是一种扩展方法。注意,您也可以直接调用扩展方法,因为它们是静态的[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($archive,$source,“myfolder\folder2\file.log”)
@NightOwl888适合我,请将其作为答案。谢谢,为什么投反对票?