পাওয়ারশেল থেকে একটি ভেরিয়েবলে সঞ্চিত কমান্ড কার্যকর করা


152

আমার একটি কমান্ড রয়েছে যা আমি পাওয়ারশেলের একটি চলকটিতে তৈরি এবং সঞ্চয় করেছি। এই কমান্ডটি যদি আমি একটি লিখন-হোস্ট করি এবং একটি স্ট্যান্ডার্ড cmd.exeউইন্ডোতে অনুলিপি এবং আটকানো কাজ করে ।

আমি আমার স্ক্রিপ্টের ভিতরে থেকে এই আদেশটি কীভাবে সম্পাদন করব?

আমি ভাগ্যক্রমে ইনভোক-কমান্ড বা ইনভোক-এক্সপ্রেশনের বেশ কয়েকটি সংমিশ্রণ চেষ্টা করেছি।

এইভাবে আমি ভেরিয়েবলটি তৈরি করেছি:

$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".zip " + $logpath1 + "u_ex" + $yesterday + ".log"

ভেরিয়েবলটি স্ক্রিনে প্রিন্ট করা থাকলে এমন দেখাবে:

7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log

উত্তর:


206

Invoke-Expressionদুটি ভেরিয়েবল (কমান্ড: স্ট্রিং এবং প্যারামিটার: অ্যারে) ব্যতীত এখানে আরও একটি উপায় রয়েছে । এটা আমার জন্য ভালই কাজ করে। ধরুন 7z.exeসিস্টেমের পথে।

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& $cmd $prm

যদি কমান্ডটি (7z.exe) জানা থাকে এবং কেবলমাত্র পরামিতিগুলি পরিবর্তনশীল হয় তবে এটি করবে

$prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'

& 7z.exe $prm

বিটিডাব্লু, Invoke-Expressionএকটি পরামিতি সহ আমার জন্যও কাজ করে, যেমন, এটি কাজ করে

$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'

Invoke-Expression $cmd

পিএস আমি সাধারণত প্যারামিটার অ্যারের সাথে উপায়টি পছন্দ করি কারণ এর জন্য একটি এক্সপ্রেশন তৈরির চেয়ে প্রোগ্রামগতভাবে রচনা করা সহজ Invoke-Expression


ওটা দারুন. এটি এখন একসাথে আসতে শুরু হয়। 'C: \ টেম্পোর space স্পেস \ টেস্ট 1.জিপ'-এর পরিবর্তে আমি কি কেবল একটি $ ভেরিয়েবল ব্যবহার করতে পারি? আমার এটি "" বা "" রাখার দরকার আছে?
ট্র্যাভিস

Splatting কাজ মনে হয় একই: & $ cmd কমান্ড @prm কিন্তু আমি কেন যে হয় সম্পর্কে কৌতুহলী
C2H5OH

44

আপনার আদেশটি এর সাথে অনুরোধ করার চেষ্টা করুন Invoke-Expression:

Invoke-Expression $cmd1

এখানে আমার মেশিনে একটি কার্যকারী উদাহরণ:

$cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt"
Invoke-Expression $cmd

iexএকটি হল ওরফে জন্য Invoke-Expressionতাই আপনি কাজ করতে পারে:

iex $cmd1

সম্পূর্ণ তালিকার জন্য: আরও স্টাফের জন্য https://ss64.com/ps/ দেখুন Powershell

শুভকামনা ...


আমাকে বলে যে '7z.exe a -tzip c: c arc_logs \ site-host-at-web1-100827.zip c: et inetpub \ logs \ logfiles \ w3svc1 \ u_ex100827.log' এটিকে একটি নাম হিসাবে স্বীকৃতি দেওয়া হয়নি সেমিডলেট, ফাংশন, স্ক্রিপ্ট ফাইল বা অপারেবল প্রোগ্রাম। নামের বানানটি পরীক্ষা করুন বা কোনও পথ অন্তর্ভুক্ত থাকলে, पथটি সঠিক কিনা তা যাচাই করুন এবং আবার চেষ্টা করুন। At: লাইন: 14 চর: 1 + & <<<< $ সেমিডি 1
ট্র্যাভিস

@ ট্রাভিস: ওফ! যদি কোনও আরগস না থাকে তবে এম্পারস্যান্ড কাজ করে। আমি আপনার আদেশের সমাধান সহ পোস্টটি আপডেট করেছি।
kbrimington

আমি পূর্বে আহ্বান-প্রকাশের চেষ্টা করেছি এবং এটি কার্যকর হয়নি। এটি ত্রুটিটি ছুঁড়েছে: খারাপ সংখ্যার ধ্রুবক: 7.. এট: লাইন: 1 চর: 2 + 7z <<<<। এক্সিট এ-টিজিপ সি: \ আরকি_লগস \ সাইট-হোস্ট- এ্যাট-ওয়েবে 1-100827.zip সি: \ inetpub s logs \ logfiles \ w3svc1 \ u_ex100827.log দেখে মনে হচ্ছে এটি কার্যকর করার পরিবর্তে এটি মূল্যায়নের চেষ্টা করছে।
ট্র্যাভিস

@ ট্রাভিস: এটি হতে পারে যে 7z.exe আপনার পথে নেই। এটি যে পথে রয়েছে তা যাচাই করুন এবং / অথবা আপনার অভিব্যক্তিতে এক্সিকিউটেবলকে পুরো পাথের নাম দেওয়ার চেষ্টা করুন।
kbrimington

1
@ ট্র্যাভিস: আমি কেবল নিজের সিস্টেমে নিশ্চিত করেছিলাম যে 7z.exe আপনার বর্ণিত ত্রুটিটি দিয়েছে, কেবলমাত্র কমান্ড প্রম্পট থেকে টাইপ করে, তবে 7z.exe- এর পুরো পথ দিয়ে (আমার কাছে এটি ছিল 'C:\Program Files\7-zip\7z.exe', আমি 7z.exe চালাতে পারতাম)।
kbrimington
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.