PowerShell равно . NET, как C#. Большинство из тех же. NET библиотек будут работать в PowerShell, как и в C#, с некоторыми причудливыми крайними случаями из-за того, что выполнение скрипта отличается от скомпилированной. NET программы. Если вы найдете примеры из C#, вы обычно можете создавать те же объекты и вызывать те же методы, которые вы видите в C# примерах. В большинстве случаев это предпочтительный метод для перевода вызовов C# в синтаксис PowerShell.
Однако PowerShell делает шаг вперед по сравнению с этим, а также позволяет компилировать и выполните ad-ho c C# код . Например, :
$assemblies=(
"System"
)
$source=@"
using System;
namespace Helloworld
{
public static class Hello{
public static void Main(){
Console.WriteLine("Hello, world!");
}
}
}
"@
Add-Type -ReferencedAssemblies $assemblies -TypeDefinition $source -Language CSharp
[HelloWorld.Hello]::Main()
Код, представленный выше, выполняет компиляцию короткого класса стиля hello-world и делает его члены доступными для сеанса PowerShell после завершения Add-Type
. Хотя в целом этого метода следует избегать в пользу вызова членов. NET непосредственно из PowerShell, в некоторых случаях (например, в случае использования P/Invoke
для доступа к Win32 API) это становится полезным, и это ваше Единственный реальный вариант.
Существует также третий вариант. Вместо того, чтобы ad-ho c компилировать C# код, как описано выше, вы также можете создать правильную. NET DLL и использовать для загрузки ее Add-Type
. Это гораздо безопаснее, хотя и менее удобно, чем компиляция C# при каждом выполнении:
# Assume we have Library.dll already built
# and it consists of the same code as the `$source` in the block above
Add-Type -Path C:\path\to\Library.dll
[HelloWorld.Hello]::Main()