एक्शन SDK का उपयोग करके डेस्कटॉप एक्शन के लिए Power Automate बनाएँ
यह आलेख बताता है कि डेस्कटॉप के लिए कस्टम क्रियाएँ कैसे बनाई जाती हैं। Power Automate
कस्टम क्रियाएँ बनाना
महत्त्वपूर्ण
आरक्षित कीवर्ड का उपयोग कार्रवाई के नाम और/या कार्रवाई गुण के रूप में नहीं किया जा सकता. क्रिया नाम और/या क्रिया गुण के रूप में आरक्षित कीवर्ड का उपयोग करने से त्रुटिपूर्ण व्यवहार उत्पन्न होता है। अधिक जानकारी: डेस्कटॉप प्रवाह में आरक्षित कीवर्ड
एक नया क्लास लाइब्रेरी (.NET फ्रेमवर्क) प्रोजेक्ट बनाकर शुरुआत करें। .NET फ्रेमवर्क संस्करण 4.7.2 का चयन करें।
बनाए गए कस्टम मॉड्यूल में कोई क्रिया बनाने के लिए:
- स्वतः निर्मित Class1.cs फ़ाइल को हटाएँ।
- कस्टम एक्शन का प्रतिनिधित्व करने के लिए अपने प्रोजेक्ट के अंदर एक नया क्लास बनाएं और उसे एक अलग नाम दें।
- Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK और Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes नामस्थान शामिल करें.
- क्रियाओं का प्रतिनिधित्व करने वाली सभी कक्षाओं में आपकी कक्षा के ऊपर [Action] विशेषता होनी चाहिए.
- क्लास की सार्वजनिक पहुंच होनी चाहिए और उसे ActionBase क्लास से विरासत में प्राप्त होना चाहिए।
using System;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
namespace Modules.MyCustomModule
{
[Action(Id = "CustomAction")]
public class CustomAction : ActionBase
{
public override void Execute(ActionContext context)
{
throw new NotImplementedException();
}
}
}
अधिकांश क्रियाओं में पैरामीटर (इनपुट या आउटपुट) होते हैं। इनपुट और आउटपुट पैरामीटर्स को क्लासिक C# गुणों द्वारा दर्शाया जाता है।
प्रत्येक प्रॉपर्टी में एक उपयुक्त C# विशेषता होनी चाहिए, या तो [InputArgument]
या [OutputArgument]
जो उसके प्रकार को निर्धारित करे और डेस्कटॉप पर उसे कैसे प्रस्तुत किया जाए, यह बताए। Power Automate
इनपुट तर्कों के डिफ़ॉल्ट मान भी हो सकते हैं.
using System.ComponentModel;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
namespace Modules.MyCustomModule
{
[Action(Id = "CustomAction")]
public class CustomAction : ActionBase
{
[InputArgument, DefaultValue("Developer")]
public string InputName { get; set; }
[OutputArgument]
public string DisplayedMessage { get; set; }
public override void Execute(ActionContext context)
{
DisplayedMessage = $"Hello, {InputName}";
}
}
}
कस्टम क्रियाओं में विवरण जोड़ना
मॉड्यूल और क्रियाओं के लिए विवरण और अनुकूल नाम जोड़ें ताकि RPA डेवलपर्स को पता चले कि उनका सर्वोत्तम उपयोग कैसे किया जाए।
Power Automate डेस्कटॉप डिज़ाइनर के लिए अनुकूल नाम और विवरण दिखाता है।
आप मॉड्यूल प्रोजेक्ट के गुण फ़ोल्डर के अंदर एक "Resources.resx" फ़ाइल बना सकते हैं। नई ".resx" फ़ाइल का नाम "Resources.resx" होना चाहिए.
मॉड्यूल और क्रियाओं के विवरण का प्रारूप निम्नानुसार होना चाहिए:
नाम फ़ील्ड में क्रमशः "मॉड्यूल_विवरण" या "कार्रवाई_विवरण" और "मॉड्यूल_फ्रेंडलीनाम" या "कार्रवाई_फ्रेंडलीनाम"। मान फ़ील्ड में विवरण.
हम यह भी अनुशंसा करते हैं कि आप पैरामीटर्स के लिए विवरण और अनुकूल नाम प्रदान करें। उनका प्रारूप इस प्रकार होना चाहिए: "Action_Parameter_Description", "Action_Parameter_FriendlyName".
टिप
यह अनुशंसित है कि आप टिप्पणी क्षेत्र में यह दर्शाएं कि आप क्या वर्णन कर रहे हैं (जैसे मॉड्यूल, क्रिया आदि)
इन्हें [InputArgument]
, [OutputArgument]
और [Action]
विशेषताओं के FriendlyName और Description गुणों के साथ भी सेट किया जा सकता है।
यहां एक कस्टम मॉड्यूल के लिए Resources.resx फ़ाइल का एक उदाहरण दिया गया है।
क्रियाओं और मापदंडों में शीघ्रता से मैत्रीपूर्ण नाम और विवरण जोड़ने का दूसरा तरीका [क्रिया], [InputArguement] और [OutputArguement] एट्रिब्यूट में FriendlyName और विवरण गुणों के साथ है.
नोट
किसी मॉड्यूल में अनुकूल नाम और विवरण जोड़ने के लिए, आपको संबंधित .resx फ़ाइल को संशोधित करना होगा या संबंधित C# विशेषताएँ जोड़नी होंगी।
कस्टम क्रियाओं में त्रुटि प्रबंधन जोड़ना
अपनी कार्रवाई में कस्टम अपवाद परिभाषित करने के लिए, कस्टम कार्रवाई वर्ग के ऊपर [Throws("ActionError")]
विशेषता का उपयोग करें। प्रत्येक अपवाद मामले जिसे आप परिभाषित करना चाहते हैं, उसकी अपनी विशेषता होनी चाहिए।
कैच ब्लॉक में, निम्नलिखित कोड का उपयोग करें:
throw new ActionException("ActionError", e.Message, e.InnerException);
सुनिश्चित करें कि ActionException
नाम आपके द्वारा Throws
विशेषता में दिए गए नाम से मेल खाता है. प्रत्येक अपवाद मामले के लिए throw new ActionException
का उपयोग करें और उसे संगत Throws
विशेषता नाम से मिलाएं। Throws
विशेषता के साथ परिभाषित सभी अपवाद डिज़ाइनर की क्रिया त्रुटि हैंडलिंग टैब में दिखाई देते हैं।
इसका एक उदाहरण सशर्त कार्रवाई अनुभाग में पाया जा सकता है।
संसाधन स्थानीयकरण
डेस्कटॉप के लिए मॉड्यूल की डिफ़ॉल्ट भाषा अंग्रेजी मानी जाती है। Power Automate
Resources.resx फ़ाइल अंग्रेजी में होनी चाहिए.
स्थानीयकरण के लिए अतिरिक्त Resources.{locale}.resx फ़ाइलों के साथ किसी भी अन्य भाषा को जोड़ा जा सकता है। उदाहरण के लिए, Resources.fr.resx.
कस्टम मॉड्यूल श्रेणियाँ
बेहतर कार्य संगठन के लिए मॉड्यूल में श्रेणियां और उपश्रेणियां शामिल की जा सकती हैं।
श्रेणियों, उपश्रेणियों में कस्टम क्रियाओं को अलग करने के लिए, कस्टम क्रिया का प्रतिनिधित्व करने वाले वर्ग से पहले आने वाली [क्रिया] विशेषता को निम्नलिखित तरीके से संशोधित करें:
[Action(Category = "category.subcategory")]
नोट
एक मॉड्यूल में अनेक श्रेणियां हो सकती हैं। इसी प्रकार, श्रेणियों को उपश्रेणियों में विभाजित किया जा सकता है। यह संरचना अनिश्चित हो सकती है।
ऑर्डर गुण डिज़ाइनर में क्रियाओं के पूर्वावलोकन का क्रम निर्धारित करता है।
Action1
"TestCategory" श्रेणी के अंतर्गत आता है और यह मॉड्यूल की पहली क्रिया है (इस तरह आप उदाहरण के साथ ऑर्डर और श्रेणी की व्याख्या करते हैं)।
[Action(Id = "Action1", Order = 1, Category = "TestCategory")]
सशर्त क्रियाएँ
सशर्त क्रियाएं वे क्रियाएं हैं जो या तो "सत्य" या "असत्य" लौटाती हैं। मानक लाइब्रेरी की डेस्कटॉप क्रिया के लिए 'यदि फ़ाइल मौजूद है' Power Automate सशर्त क्रिया का एक अच्छा उदाहरण है।
सशर्त कार्रवाई का उदाहरण:
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
using System;
using System.ComponentModel;
namespace Modules.CustomModule
{
[ConditionAction(Id = "ConditionalAction1", ResultPropertyName = nameof(Result))]
[Throws("ActionError")] // TODO: change error name (or delete if not needed)
public class ConditionalAction1 : ActionBase
{
#region Properties
public bool Result { get; private set; }
[InputArgument]
public string InputArgument1 { get; set; }
#endregion
#region Methods Overrides
public override void Execute(ActionContext context)
{
try
{
//TODO: add action execution code here
}
catch (Exception e)
{
if (e is ActionException) throw;
throw new ActionException("ActionError", e.Message, e.InnerException);
}
}
#endregion
}
}
परिणाम बूलियन चर पर ध्यान दें।
यदि फ़ाइल मौजूद है कार्रवाई में कोई आउटपुट तर्क नहीं है। यह जो लौटाता है वह सत्य या असत्य होता है, जो इस बात पर निर्भर करता है कि बूलियन चर परिणाम क्या रखता है।
कस्टम क्रिया चयनकर्ता
कुछ विशेष मामले हैं, जिनमें एक कस्टम कार्रवाई के लिए एक से अधिक भिन्नता की आवश्यकता हो सकती है।
इसका एक उदाहरण मानक लाइब्रेरी की क्रियाओं से "एक्सेल लॉन्च करें" क्रिया है।
"रिक्त दस्तावेज़ के साथ" चयनकर्ता का उपयोग करने पर, प्रवाह एक रिक्त Excel दस्तावेज़ लॉन्च करता है, जबकि "और निम्न दस्तावेज़ खोलें" चयन का उपयोग करने पर फ़ाइल को खोलने के लिए फ़ाइल पथ की आवश्यकता होती है।
ऊपर बताई गई दो क्रियाएं "एक्सेल लांच करें" आधार क्रिया के दो चयनकर्ता हैं।
कस्टम क्रियाएँ बनाते समय, आपको कार्यक्षमता को फिर से लिखने की आवश्यकता नहीं होती।
आप एक एकल "आधार" क्रिया बना सकते हैं, इसके इनपुट और आउटपुट पैरामीटर सेट कर सकते हैं और फिर क्रिया चयनकर्ताओं का उपयोग करके चुन सकते हैं कि प्रत्येक फ्लेवर में क्या दिखाई देगा।
क्रिया चयनकर्ताओं के माध्यम से एकल क्रिया पर अमूर्तता का एक स्तर जोड़ा जा सकता है, जिससे एकल "आधार" क्रिया से विशिष्ट कार्यक्षमता की पुनर्प्राप्ति की अनुमति मिलती है, तथा हर बार उसी क्रिया का नया रूप बनाने के लिए कोड को पुनः लिखने की आवश्यकता नहीं होती।
चयनकर्ताओं को विकल्प के रूप में समझें, एक ही क्रिया को फ़िल्टर करें और संबंधित चयनकर्ताओं के अनुसार केवल आवश्यक जानकारी प्रस्तुत करें।
एक नया क्रिया चयनकर्ता बनाने के लिए, सबसे पहले चयनकर्ताओं द्वारा उपयोग की जाने वाली एक आधार क्रिया बनाएं।
केंद्रीय क्रिया को इनपुट C# तर्क के रूप में बूलियन या एनम गुण की आवश्यकता होती है।
इस गुण का मान निर्धारित करता है कि कौन सा चयनकर्ता उपयोग किया जाएगा।
सबसे आम तरीका enum का उपयोग करना है। विशेषकर जब दो से अधिक चयनकर्ताओं की आवश्यकता हो, तो enums ही एकमात्र विकल्प है।
दो चयनकर्ता मामलों के लिए, बूलियन का उपयोग किया जा सकता है।
इस गुण को, जिसे प्रतिबंध तर्क के रूप में भी जाना जाता है, का एक डिफ़ॉल्ट मान होना चाहिए।
केंद्रीय क्रिया को क्लासिक क्रिया घोषित किया जाता है।
ध्यान दें कि पहला गुण (इनपुट तर्क) एक enum है। उस संपत्ति के मूल्य के आधार पर, उपयुक्त चयनकर्ता सक्रिय हो जाता है।
नोट
तर्कों को अपने इच्छित तरीके से क्रमबद्ध करने के लिए, आप InputArgument विशेषता के आगे Order मान सेट करते हैं।
using System.ComponentModel;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Desktop.Actions.SDK.Attributes;
namespace Modules.CustomModule
{
[Action(Id = "CentralCustomAction")]
public class CentralCustomAction : ActionBase
{
#region Properties
[InputArgument, DefaultValue(SelectorChoice.Selector1)]
public SelectorChoice Selector { get; set; }
[InputArgument(Order = 1)]
public string FirstName { get; set; }
[InputArgument(Order = 2)]
public string LastName { get; set; }
[InputArgument(Order = 3)]
public int Age { get; set; }
[OutputArgument]
public string DisplayedMessage { get; set; }
#endregion
#region Methods Overrides
public override void Execute(ActionContext context)
{
if (Selector == SelectorChoice.Selector1)
{
DisplayedMessage = $"Hello, {FirstName}!";
}
else if (Selector == SelectorChoice.Selector2)
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!";
}
else // The 3rd Selector was chosen
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!\nYour age is: {Age}";
}
}
#endregion
} // you can see below how to implement an action selector
}
Enums का उपयोग करके कस्टम एक्शन चयनकर्ता
इस उदाहरण में, आप तीन चयनकर्ता बनाते हैं। एक सरल enum प्रत्येक बार उपयुक्त चयनकर्ता को निर्देशित करता है:
public enum SelectorChoice
{
Selector1,
Selector2,
Selector3
}
चयनकर्ताओं का प्रतिनिधित्व वर्गों द्वारा किया जाता है।
उन वर्गों को ActionSelector<TBaseActionClass>
वर्ग विरासत में मिलना चाहिए.
नोट
TBaseActionClass आधार क्रिया वर्ग का नाम है।
UseName() विधि में, क्रिया चयनकर्ता का नाम घोषित किया जाता है। इसका उपयोग संसाधनों को हल करने के लिए कार्रवाई के नाम के रूप में किया जाता है।
public class Selector1 : ActionSelector<CentralCustomAction>
{
public Selector1()
{
UseName("DisplayOnlyFirstName");
Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector1);
ShowAll();
Hide(p => p.LastName);
Hide(p => p.Age);
// or
// Show(p => p.FirstName);
// Show(p => p.DisplayedMessage);
}
}
नोट
चयनकर्ता वर्गों को क्रिया के रूप में घोषित नहीं किया जाना चाहिए। एकमात्र क्रिया केंद्रीय है। चयनकर्ता फिल्टर के रूप में कार्य करते हैं।
इस विशिष्ट उदाहरण में हम केवल एक तर्क प्रदर्शित करना चाहते हैं, इस प्रकार अन्य सभी को फ़िल्टर कर दिया जाता है। इसी प्रकार Selector2 के लिए:
public class Selector2 : ActionSelector<CentralCustomAction>
{
public Selector2()
{
UseName("DisplayFullName");
Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector2);
ShowAll();
Hide(p => p.Age);
}
}
और चयनकर्ता3 वर्ग:
public class Selector3 : ActionSelector<CentralCustomAction>
{
public Selector3()
{
UseName("DisplayFullDetails");
Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector3);
ShowAll();
}
}
अंतिम निष्पादन Execute(ActionContext context) विधि के माध्यम से प्राप्त किया जाता है जो केंद्रीय क्रिया में रहता है। चयनकर्ता के आधार पर, फ़िल्टर किए गए संबंधित मान प्रदर्शित किए जाते हैं।
public override void Execute(ActionContext context)
{
if (Selector == SelectorChoice.Selector1)
{
DisplayedMessage = $"Hello, {FirstName}!";
}
else if (Selector == SelectorChoice.Selector2)
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!";
}
else // The 3rd Selector was chosen
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!\nYour age is: {Age}";
}
}
बूलियन का उपयोग करके कस्टम एक्शन चयनकर्ता
निम्नलिखित उदाहरण enums के स्थान पर Boolean का उपयोग करने का उदाहरण है।
using System.ComponentModel;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.ActionSelectors;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
namespace Modules.CustomModule
{
[Action]
public class CentralCustomActionWithBoolean : ActionBase
{
#region Properties
[InputArgument, DefaultValue(true)]
public bool TimeExpired { get; set; }
[InputArgument]
public string ElapsedTime { get; set; }
[InputArgument]
public string RemainingTime { get; set; }
[OutputArgument]
public string DisplayedMessage { get; set; }
#endregion
#region Methods Overrides
public override void Execute(ActionContext context)
{
DisplayedMessage = TimeExpired ? $"The timer has expired. Elapsed time: {ElapsedTime}" : $"Remaining time: {RemainingTime}";
}
#endregion
}
public class NoTime : ActionSelector<CentralCustomActionWithBoolean>
{
public NoTime()
{
UseName("TimeHasExpired");
Prop(p => p.TimeExpired).ShouldBe(true);
ShowAll();
Hide(p => p.RemainingTime);
}
}
public class ThereIsTime : ActionSelector<CentralCustomActionWithBoolean>
{
public ThereIsTime()
{
UseName("TimeHasNotExpired");
Prop(p => p.TimeExpired).ShouldBe(false);
ShowAll();
Hide(p => p.RemainingTime);
}
}
}
कस्टम एक्शन चयनकर्ताओं के लिए विवरण सेट करना
चयनकर्ताओं के लिए विवरण और सारांश बनाने के लिए, अपने कस्टम मॉड्यूल की .resx फ़ाइल में निम्नलिखित प्रारूप का उपयोग करें।
SelectorName_Description
SelectorName_Summary
यह कार्य चयनकर्ता में WithDescription और WithSummary विधियों के साथ भी किया जा सकता है।
महत्त्वपूर्ण
कस्टम क्रियाओं का वर्णन करने वाली .dll फ़ाइलें, उनकी .dll निर्भरताएँ और सब कुछ शामिल करने वाली .cab फ़ाइल, आपके संगठन द्वारा विश्वसनीय डिजिटल प्रमाणपत्र के साथ उचित रूप से हस्ताक्षरित होनी चाहिए। प्रमाणपत्र को प्रत्येक मशीन पर भी स्थापित किया जाना चाहिए, जिस पर कस्टम एक्शन निर्भरताओं के साथ डेस्कटॉप फ़्लो लिखा/संशोधित/निष्पादित किया गया हो, जो विश्वसनीय रूट प्रमाणन प्राधिकरणों के अंतर्गत मौजूद हो।
कस्टम मॉड्यूल आईडी
प्रत्येक मॉड्यूल की अपनी आईडी (असेंबली नाम) होती है। कस्टम मॉड्यूल बनाते समय सुनिश्चित करें कि आप अद्वितीय मॉड्यूल आईडी सेट करें। अपने मॉड्यूल का असेंबली नाम सेट करने के लिए, C# प्रोजेक्ट के गुणों के सामान्य अनुभाग के अंतर्गत असेंबली नाम गुण को संशोधित करें।
चेतावनी
एक प्रवाह में समान आईडी वाले मॉड्यूल शामिल करने से टकराव उत्पन्न होगा
कस्टम मॉड्यूल नाम परंपराएँ
कस्टम मॉड्यूल को डेस्कटॉप के माध्यम से पढ़ने योग्य बनाने के लिए AssemblyName में एक फ़ाइल नाम होना चाहिए जो नीचे दिए गए पैटर्न का पालन करता हो: Power Automate
?*.Modules.?*
Modules.?*
उदाहरण के लिए, मॉड्यूल.ContosoActions.dll
प्रोजेक्ट सेटिंग्स में AssemblyTitle मॉड्यूल आईडी निर्दिष्ट करता है। इसमें केवल अल्फ़ान्यूमेरिक अक्षर और अंडरस्कोर ही हो सकते हैं तथा इसकी शुरुआत किसी अक्षर से होनी चाहिए।
कस्टम मॉड्यूल के अंदर सभी DLL पर हस्ताक्षर करें
महत्त्वपूर्ण
यह अनिवार्य है कि सभी .dll फ़ाइलें, जिनमें कस्टम मॉड्यूल (जेनरेट की गई असेंबली और इसकी सभी निर्भरताएँ) शामिल हों, विश्वसनीय प्रमाणपत्र के साथ हस्ताक्षरित हों
कस्टम मॉड्यूल के निर्माण को अंतिम रूप देने के लिए, सभी उत्पन्न .dll फ़ाइलें, जो परियोजना के bin/release या bin/Debug फ़ोल्डर के अंतर्गत पाई जा सकती हैं, हस्ताक्षरित होनी चाहिए।
Visual Studioके लिए डेवलपर कमांड प्रॉम्प्ट में निम्नलिखित कमांड (प्रत्येक .dll फ़ाइल के लिए) चलाकर विश्वसनीय प्रमाणपत्र का उपयोग करके सभी .dll फ़ाइलों पर हस्ताक्षर करें:
Visual Studioके लिए डेवलपर कमांड प्रॉम्प्ट में निम्नलिखित कमांड (प्रत्येक dll के लिए) चलाकर विश्वसनीय प्रमाणपत्र का उपयोग करके .dll फ़ाइलों पर हस्ताक्षर करें:
Signtool sign /f {your certificate name}.pfx /p {your password for exporting the certificate} /fd
SHA256 {path to the .dll you want to sign}.dll
या निम्नलिखित कमांड चलाकर (Windows PowerShell स्क्रिप्ट .ps1 बनाकर) जो सभी .dll फ़ाइलों को दोहराता है और प्रत्येक को प्रदान किए गए प्रमाणपत्र के साथ हस्ताक्षरित करता है:
Get-ChildItem {the folder where dll files of custom module exist} -Filter *.dll |
Foreach-Object {
Signtool sign /f {your certificate name}.pfx /p {your password for exporting the certificate} /fd SHA256 $_.FullName
}
नोट
डिजिटल प्रमाणपत्र में निर्यात योग्य निजी कुंजी और कोड चिह्न क्षमताएं होनी चाहिए
सब कुछ एक कैबिनेट फ़ाइल में पैक करना
कस्टम क्रियाएं और उसकी सभी निर्भरताएं (.dll फ़ाइलें) युक्त .dll को कैबिनेट फ़ाइल (.cab) में पैक किया जाना चाहिए।
नोट
.cab फ़ाइल का नामकरण करते समय, Windows ऑपरेटिंग सिस्टम के लिए फ़ाइल और फ़ोल्डर नामकरण परंपरा का पालन करें। रिक्त स्थान या विशेष वर्ण जैसे का उपयोग न करें < > : " / \ | ? *
.
निम्न पंक्तियों वाली एक Windows PowerShell स्क्रिप्ट (.ps1) बनाएँ:
param(
[ValidateScript({Test-Path $_ -PathType Container})]
[string]
$sourceDir,
[ValidateScript({Test-Path $_ -PathType Container})]
[string]
$cabOutputDir,
[string]
$cabFilename
)
$ddf = ".OPTION EXPLICIT
.Set CabinetName1=$cabFilename
.Set DiskDirectory1=$cabOutputDir
.Set CompressionType=LZX
.Set Cabinet=on
.Set Compress=on
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
"
$ddfpath = ($env:TEMP + "\customModule.ddf")
$sourceDirLength = $sourceDir.Length;
$ddf += (Get-ChildItem $sourceDir -Filter "*.dll" | Where-Object { (!$_.PSIsContainer) -and ($_.Name -ne "Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.dll") } | Select-Object -ExpandProperty FullName | ForEach-Object { '"' + $_ + '" "' + ($_.Substring($sourceDirLength)) + '"' }) -join "`r`n"
$ddf | Out-File -Encoding UTF8 $ddfpath
makecab.exe /F $ddfpath
Remove-Item $ddfpath
इस Windows PowerShell स्क्रिप्ट का उपयोग Windows PowerShell में इसे लागू करके और प्रदान करके .cab फ़ाइल बनाने के लिए किया जा सकता है:
- संपीड़ित की जाने वाली .dll फ़ाइलों की निर्देशिका.
- जनित .cab फ़ाइल को रखने के लिए लक्ष्य निर्देशिका.
निम्नलिखित सिंटैक्स का उपयोग करके स्क्रिप्ट को लागू करें:
.\{name of script containing the .cab compression directions}.ps1 "{absolute path to the source directory containing the .dll files}" "{target dir to save cab}" {cabName}.cab
उदाहरण:
.\makeCabFile.ps1 "C:\Users\Username\source\repos\MyCustomModule\bin\Release\net472" "C:\Users\Username\MyCustomActions" MyCustomActions.cab
नोट
- सुनिश्चित करें कि .cab फ़ाइल बनाते समय वास्तविक कस्टम एक्शन .dll फ़ाइल लक्षित पथ के मूल स्तर पर हो, न कि किसी सबफ़ोल्डर में।
- .cab फ़ाइल भी हस्ताक्षरित होनी चाहिए. उनमें निहित अहस्ताक्षरित .cab फ़ाइलें और/या अहस्ताक्षरित .dlls डेस्कटॉप प्रवाह में उपयोग योग्य नहीं होंगी और समावेशन के दौरान त्रुटि उत्पन्न करेंगी।