পাওয়ারশেলের একাধিক লাইনে লম্বা কমান্ডগুলি কীভাবে বিভক্ত করা যায়


227

আপনি কীভাবে পাওয়ারশেলের নীচের মতো একটি কমান্ড নেবেন এবং এটি একাধিক লাইনে বিভক্ত করবেন?

&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" -verb:sync -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" -dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"

এছাড়াও দেখুন ... stackoverflow.com/questions/3235850/...
SteveC

উত্তর:


321

ট্রেলিং ব্যাকটিক চরিত্র, অর্থাৎ,

&"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" `
-verb:sync `
-source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" `
-dest:contentPath="c:\websites\xxx\wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"

সাদা স্পেস বিষয়। প্রয়োজনীয় বিন্যাসটি হ'ল Space`Enter


1
এটি কমান্ডের ইতিহাস (আপ তীর) কার্যকারিতা ভঙ্গ করে বলে মনে হচ্ছে; প্রতিটি লাইন পৃথক কমান্ড হিসাবে প্রদর্শিত হবে। এই সমস্যা এড়ানোর একটি উপায় আছে কি?
রিচার্ড ইভ

2
আপনি যদি 3 বা তারও বেশি পাওয়ারশেল চালাচ্ছেন তবে github.com/lzybkr/psreadline দেখুন - একাধিক বিবৃতিতে ইতিহাসের ট্র্যাভারসাল স্থির করা হয়েছে।
x0n

43
ব্যাক-টিকের সামনের স্থানটি প্রয়োজন # শেখার-হার্ড-ওয়ে
জোশ গ্রাহাম

29
@ জোশ-গ্রাহাম এবং ব্যাক-টিকের পরে কোনও স্থান (বা ইনলাইন মন্তব্য) থাকা উচিত নয়। # শেখার-হার্ড-ওয়ে
রায়লুও

1
ব্যাকটিকগুলি ভঙ্গুর (উপরের মতামত রাজ্যের হিসাবে) এবং কোনও ফাইলকে বিশ্লেষণ বা পর্যালোচনা করার সময় এটি খুঁজে পাওয়া শক্ত। আপনি কোডটি ডিবাগ করা সহজ করতে চাইলে @ স্টিভেনপেনির উত্তরটি আরও ভাল।
mjd2

67

ক্লিনার আর্গুমেন্ট পাস করার জন্য আরেকটি পদ্ধতি স্প্ল্যাটিং হবে

আপনার প্যারামিটার এবং মানগুলি এর মতো হ্যাশটেবল হিসাবে সংজ্ঞায়িত করুন:

$params = @{ 'class' = 'Win32_BIOS';
             'computername'='SERVER-R2';
             'filter'='drivetype=3';
             'credential'='Administrator' }

এবং তারপরে আপনার কমান্ডলেটটি কল করুন:

Get-WmiObject @params

মাইক্রোসফ্ট ডক্স: স্প্ল্যাটিংয়ের বিষয়ে

টেকনেট ম্যাগাজিন 2011: উইন্ডোজ পাওয়ারশেল: স্প্ল্যাটিং ting

দেখে মনে হচ্ছে এটি পাওয়ারশেল 2.0 এবং এর সাথে কাজ করে


5
এটা চমৎকার! এবং আপনি $params.add('name','Bob Newhart')
এইগুলির

1
সেমিকোলনগুলি ঠিক আছে তবে অতিরিক্ত অতিরিক্ত। শুধুমাত্র প্রতি লাইনে একাধিক মান থাকলে প্রয়োজন।
জিম বার্চ

38

আহ, এবং যদি আপনার খুব দীর্ঘ স্ট্রিং থাকে যা আপনি ব্রেকআপ করতে চান, এইচটিএমএল সম্পর্কে বলুন, আপনি @বাইরের প্রতিটি পাশের অংশ লাগিয়ে এটি করতে পারেন "- এর মতো:

$mystring = @"
Bob
went
to town
to buy
a fat
pig.
"@

আপনি ঠিক এই পেতে:

Bob
went
to town
to buy
a fat
pig.

এবং আপনি যদি নোটপ্যাড ++ ব্যবহার করেন তবে এটি স্ট্রিং ব্লক হিসাবে সঠিকভাবে হাইলাইট করবে।

এখন, আপনি যদি সেই স্ট্রিংটিতে ডাবল উদ্ধৃতি ধারণ করতে চান তবে কেবল এগুলিতে যুক্ত করুন:

$myvar = "Site"
$mystring = @"
<a href="http://somewhere.com/somelocation">
Bob's $myvar
</a>
"@

আপনি ঠিক এই পেতে হবে:

<a href="http://somewhere.com/somelocation">
Bob's Site
</a>

যাইহোক, আপনি যদি সেই @ স্ট্রিংয়ে ডাবল-কোট ব্যবহার করেন তবে নোটপ্যাড ++ এটি উপলব্ধি করতে পারে না এবং কেসটির উপর নির্ভর করে সিনট্যাক্স রঙটি যেমন উদ্ধৃত বা উদ্ধৃত হয়নি তা সরিয়ে ফেলবে।

এবং এর চেয়ে ভাল এটি হ'ল: আপনি যে কোনও জায়গায় $ ভেরিয়েবল সন্নিবেশ করান, এটি ব্যাখ্যা করে! (যদি লেখায় ডলারের সাইন দরকার হয় তবে আপনি এটির মতো টিক চিহ্ন সহ এড়াতে পারেন:-`$-এ-ভেরিয়েবল`)

বিজ্ঞপ্তি! আপনি চূড়ান্ত করা না থাকে তাহলে "@খুব লাইনের শুরু , এটা ব্যর্থ হবে। আমার কোডটিতে এটি ইনডেন্ট করতে পারলাম না তা বুঝতে আমাকে এক ঘন্টা সময় লাগল!

বিষয়টিতে এখানে এমএসডিএন রয়েছে: উইন্ডোজ পাওয়ারশেল "এখানে-স্ট্রিংস" ব্যবহার করে


1
ঝরঝরে ট্রিক, যদিও আমার কাছে ভেরিয়েবল $ থাকলে ... এটি কাজ করে না বলে মনে হচ্ছে। আমি পেয়েছি "এখানে স্ট্রিং শিরোনামের পরে চরিত্রটির অনুমতি নেই ..."
তোফুটিম

আমি মনে করি না আপনি একটি পরিবর্তনশীল নাম, কেবল একটি স্ট্রিং ভাঙ্গতে পারেন।
বিজিএম কোডার

19

আপনি ব্যাকটিক অপারেটরটি ব্যবহার করতে পারেন:

& "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" `
    -verb:sync `
    -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" `
    -dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"

এটি এখনও আমার স্বাদের জন্য কিছুটা দীর্ঘ, তাই আমি কিছু নামযুক্ত ভেরিয়েবল ব্যবহার করব:

$msdeployPath = "C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe"
$verbArg = '-verb:sync'
$sourceArg = '-source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web"'
$destArg = '-dest:contentPath="c:\websites\xxx\wwwroot\,computerName=192.168.1.1,username=administrator,password=xxx"'

& $msdeployPath $verbArg $sourceArg $destArg

1
আমি অন্যান্য পরামর্শের তুলনায় পরিবর্তনশীল নামগুলি পছন্দ করি কারণ এটি অ শক্তিশক্তি বিশেষজ্ঞদের পক্ষে সম্ভবত সবচেয়ে পঠনযোগ্য বিকল্প। যদি আমি কোনও টিউটোরিয়াল / সেট-আপ গাইড দেখেছি যা স্প্ল্যাটিং ব্যবহার করে আমি স্প্ল্যাটিংয়ের উপর কোনও সাব-টিউটোরিয়াল ছাড়াই যা চলছে তাতে আমি সম্পূর্ণরূপে হারিয়ে যাব। তেমনি, ব্যাকটিকগুলি ভঙ্গুর মনে হয় এবং সম্ভবত সাধারণ চেষ্টা করা এবং সত্যিকারের পিএস ভেরিয়েবলগুলির চেয়ে কম পরিচিত।
জোশ ডেসমন্ড

13

আপনার যদি কোনও ফাংশন থাকে:

$function:foo | % Invoke @(
  'bar'
  'directory'
  $true
)

আপনার যদি একটি সেমিডলেট থাকে :

[PSCustomObject] @{
  Path  = 'bar'
  Type  = 'directory'
  Force = $true
} | New-Item

আপনার যদি আবেদন থাকে:

{foo.exe @Args} | % Invoke @(
  'bar'
  'directory'
  $true
)

অথবা

icm {foo.exe @Args} -Args @(
  'bar'
  'directory'
  $true
)

3

PowerShell 5 এবং PowerShell 5 ISE, এটা শুধু ব্যবহার করা সম্ভব Shift+ + Enterএকাধিক লাইন সম্পাদনা (আদর্শ ব্যাকটিক পরিবর্তে জন্য `প্রতিটি লাইনে শেষে):

PS> &"C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe" # Shift+Enter
>>> -verb:sync # Shift+Enter
>>> -source:contentPath="c:\workspace\xxx\master\Build\_PublishedWebsites\xxx.Web" # Shift+Enter
>>> -dest:contentPath="c:\websites\xxx\wwwroot,computerName=192.168.1.1,username=administrator,password=xxx"

0

গণনা সহ স্প্ল্যাট পদ্ধতি

আপনি যদি স্প্ল্যাট পদ্ধতিটি চয়ন করেন তবে অন্যান্য পরামিতিগুলি ব্যবহার করে তৈরি করা গণনাগুলি সাবধান করুন। অনুশীলনে, কখনও কখনও আমাকে প্রথমে ভেরিয়েবল সেট করতে হয় তারপরে হ্যাশ টেবিলটি তৈরি করতে হয়। এছাড়াও, ফর্ম্যাটের মূল মান বা আধা-কোলনের (উপরে উল্লিখিত) চারপাশে একক উদ্ধৃতি প্রয়োজন নেই।

Example of a call to a function that creates an Excel spreadsheet

$title = "Cut-off File Processing on $start_date_long_str"
$title_row = 1
$header_row = 2
$data_row_start = 3
$data_row_end = $($data_row_start + $($file_info_array.Count) - 1)

# use parameter hash table to make code more readable
$params = @{
    title = $title
    title_row = $title_row
    header_row = $header_row
    data_row_start = $data_row_start
    data_row_end = $data_row_end
}
$xl_wksht = Create-Excel-Spreadsheet @params

দ্রষ্টব্য: ফাইল অ্যারেতে এমন তথ্য রয়েছে যা স্প্রেডশিটকে কীভাবে পপুলেশন করবে তা প্রভাবিত করবে।


-1

একাধিক লাইন ধরে স্ট্রিং ভাঙ্গার আরেকটি উপায় হ'ল স্ট্রিংয়ের মাঝখানে একটি খালি অভিব্যক্তি স্থাপন করা এবং লাইনগুলি জুড়ে এটি ভেঙে দেওয়া:

নমুনা স্ট্রিং:

"stackoverflow stackoverflow stackoverflow stackoverflow stackoverflow"

লাইন জুড়ে বিভক্ত:

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