🎯 C++ से C++/CLI DLL के माध्यम से PowerShell को निष्पादित करने के चरण (Visual Studio 2022 / C++)
✅ समग्र वास्तुकला
🔹 ① CLI रैपर DLL (C++/CLI)
PowerShell स्क्रिप्ट को निष्पादित करने की कार्यक्षमता प्रदान करता है।
🔹 ② नेटिव C++ कॉलर
PowerShell स्क्रिप्ट चलाने के लिए CLI DLL को कॉल करता है।
🔧 चरण 1: CLI रैपर DLL प्रोजेक्ट बनाना
1. प्रोजेक्ट बनाना
- [नया प्रोजेक्ट बनाएँ] → [C++] → CLR क्लास लाइब्रेरी (.NET Framework)
- नाम:
PowerShellWrapper
💡 यदि यह टेम्प्लेट प्रदर्शित नहीं होता है, तो “.NET डेस्कटॉप विकास” वर्कलोड स्थापित करें।
2. NuGet पैकेज जोड़ें
- प्रोजेक्ट पर राइट-क्लिक करें → [NuGet पैकेज प्रबंधित करें]
System.Management.Automation खोजें और स्थापित करें
(संस्करण 5.x या 7.x)
3. CLI कोड कार्यान्वयन
PowerShellWrapper.h
1
2
3
4
5
6
7
8
9
10
| #pragma once
using namespace System;
namespace PowerShellWrapper {
public ref class PowerShellExecutor {
public:
String^ Execute(String^ script);
};
}
|
PowerShellWrapper.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| #include "PowerShellWrapper.h"
using namespace System;
using namespace System::Management::Automation;
using namespace System::Collections::ObjectModel;
String^ PowerShellWrapper::PowerShellExecutor::Execute(String^ script)
{
PowerShell^ ps = PowerShell::Create();
ps->AddScript(script);
Collection<PSObject^>^ results = ps->Invoke();
System::Text::StringBuilder^ sb = gcnew System::Text::StringBuilder();
for each (PSObject^ result in results)
{
sb->AppendLine(result->ToString());
}
return sb->ToString();
}
|
🔧 चरण 2: नेटिव C++ से कॉल करना
1. C++ कंसोल ऐप प्रोजेक्ट बनाना
2. संदर्भ सेटिंग
- प्रोजेक्ट पर राइट-क्लिक करें → [जोड़ें] → [संदर्भ] → प्रोजेक्ट →
PowerShellWrapper जोड़ें - [गुण] → [C/C++] → [कॉमन लैंग्वेज रनटाइम सपोर्ट] → /clr में बदलें
3. निष्पादन कोड (main.cpp)
1
2
3
4
5
6
7
8
9
10
11
12
13
| #using <System.dll>
#using "..\\PowerShellWrapper\\Debug\\PowerShellWrapper.dll"
using namespace System;
using namespace PowerShellWrapper;
int main()
{
PowerShellExecutor^ executor = gcnew PowerShellExecutor();
String^ result = executor->Execute("Get-Process | Select-Object -First 1");
Console::WriteLine(result);
return 0;
}
|
- यह कॉन्फ़िगरेशन COM के बजाय सीधे .NET DLL को संदर्भित करता है, इसलिए IDL, TLB, या COM पंजीकरण की आवश्यकता नहीं है ।
✅ अंतिम वास्तुकला
1
2
3
4
5
| Solution
├── PowerShellWrapper (C++/CLI DLL)
│ └── PowerShellExecutor
├── NativeApp (C++ EXE)
└── main.cpp → DLL कॉल
|