পোস্ট বিল্ড ইভেন্ট পাওয়ারশেল চালায়


87

পাওয়ারশেল স্ক্রিপ্টটি কার্যকর করতে পোস্ট বিল্ড ইভেন্ট সহ একটি নেট প্রকল্প স্থাপন করা কি সম্ভব? আমি কিছু স্ক্রিপ্ট উত্পন্ন করতে এই স্ক্রিপ্টটি ব্যবহার করছি।

এটি কোনও ডিবাগ বা স্ক্রিপ্টে বিল্ড প্রকাশের বিষয়টিও আমি পাস করতে পারি। এর একটি উদাহরণ দুর্দান্ত হবে।


উত্তর:


120

এখানে একটি উদাহরণ:

প্রথমত : আপনাকে অবশ্যই সচেতন হতে হবে যে স্ক্রিপ্টগুলি সম্পাদন করার জন্য পাওয়ারশেল অবশ্যই কনফিগার করা উচিত। নিম্নলিখিত লাইনটি পাওয়ারশেলকে স্ক্রিপ্টগুলি কার্যকর করার অনুমতি দেয়:

Set-ExecutionPolicy RemoteSigned

এখানে বিশেষ উল্লেখ : আপনি যদি একটি bits৪ বিট সিস্টেম চালাচ্ছেন তবে ভিজ্যুয়াল স্টুডিও ২০১০ এক্সিকিউটেবল 'ডিভেনভ.এক্সে ' এই বিষয়টি 32 বিট এক্সিকিউটিস হিসাবে দেখাতে হবে, তাই আপনাকে পাওয়ারশেল 32-কে স্ক্রিপ্টগুলি কার্যকর করার অনুমতি দেওয়া দরকার।

একবার আপনি এখানে আপনার প্রকল্পের বৈশিষ্ট্যগুলিতে যেতে পারেন এবং পোস্ট বিল্ডটি এখানে বর্ণিত হিসাবে কনফিগার করতে পারেন (ফরাসী ভাষায় দুঃখিত):

ভিএস ২০১০-তে পোস্ট বিল্ড

উদাহরণ স্বরূপ :

পাওয়ারশেল সহ পোস্টবিল্ডের উদাহরণ

এখানে ফাইল ' psbuild.ps1', এটি test.txtভিতরে কনফিগারেশনের নাম সহ লক্ষ্য পথে একটি ' ' তৈরি করে । আমি আপনার পোস্ট বিল্ড স্ক্রিপ্টটি ডিবাগ করার জন্য বিভিন্ন উপায়ে মন্তব্য করেছি (আউটপুটটিতে বার্তা বাক্স, শব্দ, বার্তা)

param ([string]$config, [string]$target)

#[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
#[void][System.Windows.Forms.MessageBox]::Show("It works.")
#[Console]::Beep(600, 800)
#Write-Host 'coucou'
set-content $target -Value $config -Force

8
ভাল উত্তর. আমি কেবল যুক্ত করব যে আপনি কার্যকর করার নীতিটি অনিয়ন্ত্রিত হিসাবে সেট করবেন না, বরং এর পরিবর্তে পুনরায় নকশাকৃত করুন। সীমাবদ্ধ না হওয়া যেকোন স্ক্রিপ্টকে কার্যকর করতে দেয়, যেখানে রিমোটসাইনডের জন্য ডাউনলোড স্ক্রিপ্টগুলির একটি বিশ্বস্ত কী দিয়ে স্বাক্ষর করা দরকার।
বিফারিনো

4
হাম আপনি কি ফ্যাট 32 ড্রাইভে একটি .PS1 ফাইল ডাউনলোড করতে পরীক্ষা করেন বা আপনি "রিমোটসাইনড" দিয়ে .PS1 ফাইল ডাউনলোড করতে বেসিক সেমিডলাইন এফটিপি ব্যবহার করেন? এটি কি এক ধরণের "ধূমপায়ী সুরক্ষা" নয়?
JPBlanc

4
Bit৪ বিট সিস্টেমের জন্য বিশেষ উল্লেখের জন্য +1 - আমি পড়ার আগ পর্যন্ত পাগল হয়ে যাচ্ছিলাম আমাকে 32 বিট পাওয়ারশেলের মধ্যেও মৃত্যুদণ্ড কার্যকর করার অনুমতি দেওয়া দরকার ছিল। ধন্যবাদ!
গুয়ামুন্ডুর এইচ

দুর্ভাগ্যক্রমে কোনও চিত্র ফাইল নেই: i.stack.imgur.com/gZoPi.png i.stack.imgur.com/VTIRW.png
আন্দ্রেজ মার্টিনা

7
আপনি যদি পথটির জন্য ব্যবহার করেন: সি: \ উইন্ডোজ ys সিজনেটিভ \ উইন্ডোস্পওয়ারশেল \ v1.0 \ পাওয়ারশেল.এক্সে, পাওয়ারশেলের bit৪ বিটের সংস্করণটি শুরু করা হবে। রিডাইরেক্টরকে পুনঃনির্দেশ বন্ধ করতে এবং% systemroot% \ system32- এ সত্যিকারের অ্যাক্সেসের অনুমতি দেওয়ার জন্য% systemroot% \ sysnative একটি বিশেষ নাম।
পিটার ওহেলার্ট

15

কমান্ড সেট-এক্সিকিউটপলিসি সাময়িকভাবে বর্তমান অধিবেশনের অধীনে কার্যকরকরণের নীতি সেট করবে। আপনি যদি এটিকে পাওয়ারশেলে সেট করেন এবং বনাম পোস্ট বিল্ড কমান্ড চালান তবে আপনি অনুমতি পাবেন না। সুতরাং প্রথমে সেট করুন তারপর আপনার PS1 স্ক্রিপ্টটি বেলোর মতো চালান

powershell -ExecutionPolicy Unrestricted $(ProjectDir)Deploy.ps1 -ProjectDir $(ProjectDir) -TargetPath $(TargetPath)

11

সিস্টেম-ওয়াইড সেটিংসের সাথে জগাখিচির পরিবর্তে এবং 32 এবং 64-বিট পরিবেশের মধ্যে পার্থক্য রাখার পরিবর্তে পাওয়ারশেলের কলটিতে কলটি নির্দিষ্ট করা আরও সহজ এবং নির্ভরযোগ্য পদ্ধতির রয়েছে ExecutionPolicy:

C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted

PS C:\Users\xyz> Get-ExecutionPolicy
Unrestricted

PS C:\Users\xyz> exit

C:\Users\xyz>PowerShell -ExecutionPolicy RemoteSigned

PS C:\Users\xyz> Get-ExecutionPolicy
RemoteSigned

উপরের কোডে কল করুন কীভাবে কল করুন Get-ExecutionPolicy আপনাকে বর্তমান মোড বলে tells এছাড়াও নোট করুন যে কীভাবে এই মোডটি পাওয়ারশেলে নিজেই কলটিতে নির্দিষ্ট করা আছে, যা স্ক্রিপ্ট ফাইলের নামের সাথে মিলিত হতে পারে:

test.ps1 সামগ্রী:

echo ('The current policy is ' + (Get-ExecutionPolicy)).ToString()

Unrestrictedস্ক্রিপ্টগুলি অক্ষম করে এমন সিস্টেমে নীতি সহ টেস্ট.পিএস 1 কল করা :

C:\Users\xyz>PowerShell -ExecutionPolicy Unrestricted -file test.ps1
The current policy is Unrestricted

এছাড়াও মনে রাখবেন, উপরে কল করে না প্রশাসনিক অধিকার প্রয়োজন, তাই এটি ভিসুয়াল স্টুডিও এর ধাপ বা অনুরূপ প্রাক Build এ বলা যায় না।


9

ভিজ্যুয়াল স্টুডিও থেকে পাওয়ার-শেল স্ক্রিপ্ট কল করার আগে এক্সিকিউশনপলিসিকে RemoteSignedপাওয়ার শেল উইন্ডো থেকে এটির মতো সেট করুন ...

Set-ExecutionPolicy -Scope CurrentUser;
ExecutionPolicy: RemoteSigned;

তারপরে নিম্নলিখিত পদ্ধতিতে পাওয়ারশেল স্ক্রিপ্ট কল করুন ...

(পূর্ণ "পাওয়ারশেল.এক্সই" ফাইল পাথ পাস করার দরকার নেই)

powershell.exe $(SolutionDir)Setup.ps1 -SolutionDir $(SolutionDir) -ProjectPath $(ProjectPath)

এখানে চিত্র বর্ণনা লিখুন

তারপরে স্ক্রিপ্টে আপনি সর্বদা এই জাতীয় প্যারামিটারটি পড়তে পারেন ...

param([string]$SolutionDir,
     [string]$ProjectPath);
#Write-Host ($SolutionDir +" Call this script with following aruments");
#Write-Host ($ProjectPath +" Call this script with following aruments");

6

পোস্ট-বিল্ড ইওন কমান্ডে এটি নীচের কমান্ড দিয়ে তৈরি করেছি:

PowerShell -NoProfile -ExecutionPolicy unrestricted -file $(SolutionDir)AutomationScript\DBAutomationScript.ps1 -target $(SolutionDir)MUFG.SECMOD.Data\SqlScripts -generatedFileName $(SolutionDir)MUFG.SECMOD.Data\SqlScripts\DeploymentDBScript.sql

ডিবিএ অটোমেশনসস্ক্রিপ্ট.পিএস 1 সামগ্রী:

param ([string]$target, [string]$generatedFileName)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.