我知道如何在PowerShell中运行C#代码。
但是在我的C#
代码中,我想使用引用的DLL(特别是NtApiDotNet)。
我在Visual Studio中将其与NuGet一起安装,并且可以正常工作,因为所引用的DLL是由Visual Studio引用的。
当我在PowerShell中使用代码时,看不到用于引用C#
代码到此DLL的选项。
我尝试使用[Reflection.Assembly]::LoadFile("c:\path\file.dll") | Out-Null
加载DLL,但需要将其加载到C#
代码中,因此对我没有帮助。
我也试图像这样加载它:
Add-Type -Path "C:\Users\myuser\Downloads\NtApiDotNet.dll"
但是没有用。
这是powershell代码:
$code = @"
using System;
using NtApiDotNet;
namespace ConsoleApplication2
{
public class Program
{
public static void Main()
{
NtSection section = null;
Console.WriteLine("C# code from PowerShell");
}
}
}
"@
$location = [PsObject].Assembly.Location
$compileParams = New-Object System.CodeDom.Compiler.CompilerParameters
$assemblyRange = @("System.dll", $location)
$compileParams.ReferencedAssemblies.AddRange($assemblyRange)
$compileParams.GenerateInMemory = $True
Add-Type -TypeDefinition $code -CompilerParameters $compileParams -passthru | Out-Null
[ConsoleApplication2.Program]::Main()
因为我没有引用DLL,所以出现以下错误:
Add-Type : c:\Users\myuser\AppData\Local\Temp\s1fssauz.0.cs(2) : The type or namespace name 'NtApiDotNet' could not
be found (are you missing a using directive or an assembly reference?)
c:\Users\myuser\AppData\Local\Temp\s1fssauz.0.cs(1) : using System;
c:\Users\myuser\AppData\Local\Temp\s1fssauz.0.cs(2) : >>> using NtApiDotNet;
c:\Users\myuser\AppData\Local\Temp\s1fssauz.0.cs(3) :
At line:24 char:1
+ Add-Type -TypeDefinition $code -CompilerParameters $compileParams -pa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (Microsoft.Power...peCompilerError:AddTypeCompilerError) [Add-Type], Except
ion
+ FullyQualifiedErrorId : SOURCE_CODE_ERROR,Microsoft.PowerShell.Commands.AddTypeCommand
Add-Type : Cannot add type. Compilation errors occurred.
At line:24 char:1
+ Add-Type -TypeDefinition $code -CompilerParameters $compileParams -pa ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-Type], InvalidOperationException
+ FullyQualifiedErrorId : COMPILER_ERRORS,Microsoft.PowerShell.Commands.AddTypeCommand
Unable to find type [ConsoleApplication2.Program].
At line:25 char:1
+ [ConsoleApplication2.Program]::Main()
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (ConsoleApplication2.Program:TypeName) [], RuntimeException
如何引用DLL,以便能够使用引用的DLL NtApiDotNet
?
可以找到与我类似的问题here。
答案 0 :(得分:1)
我只需要将DLL添加到do {
System.out.println("Select operation (1-5): ");
choice = -1;
if (!sc.hasNextInt()) {
System.out.println("Please enter a number (1-5, inclusive)");
} else {
choice = sc.nextInt();
if (choice < 1 || choice > 5) {
System.out.println(choice + " isn't an option, please enter a number (1-5, inclusive");
}
}
sc.nextLine();
} while (choice < 1 || choice > 5);
switch (choice) {
// ...
。
这是固定线:
ReferencedAssemblies
我使用了releases中的$assemblyRange = @("System.dll", $location, "C:\Users\myuser\Downloads\NtApiDotNet.dll")
。
当我根据自述文件进行编译时:
NtApiDotNet.dll
DLL无法正常工作。
答案 1 :(得分:1)
我也遇到了这个问题,但是幸运的是我解决了。要解决此问题,您需要使用
Install-Module "NtObjectManager" -Scope CurrentUser
安装NtObjectManager模块。
如果这不起作用,请确保已导入NtObjectManager。