পাওয়ারশেল স্ক্রিপ্টে কীভাবে আর্গুমেন্টটি পাস করবেন?


444

এখানে একটি PowerShellস্ক্রিপ্ট রয়েছে itunesForward.ps1যা আইটিউনসকে দ্রুত 30 সেকেন্ড এগিয়ে দেয়:

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + 30
}

এটি প্রম্পট লাইন কমান্ড দিয়ে সম্পাদন করা হয়:

powershell.exe itunesForward.ps1

কমান্ড লাইন থেকে কোনও যুক্তি পাস করা সম্ভব এবং হার্ডকডযুক্ত 30 সেকেন্ডের মানের পরিবর্তে স্ক্রিপ্টে এটি প্রয়োগ করা সম্ভব?

উত্তর:


609

কাজ হিসাবে পরীক্ষিত:

param([Int32]$step=30) #Must be the first statement in your script

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + $step
}

সাথে কল

powershell.exe -file itunesForward.ps1 -step 15

7
প্যারামিটারটি যদি একটি স্ট্রিং হয় তবে কী হবে? সিনট্যাক্স কী? এটি কি কিছু হতে পারে-স্টেপ '15' বা-পদক্ষেপ "15"
অ্যান্ড্রু গ্রে

7
@ অ্যান্ড্রু প্রথমে আপনাকে প্যারামিটারের ধরনটি পরিবর্তন করতে হবে [string]। আপনি যদি প্যারামিটার হিসাবে একটি স্ট্রিং পাস করতে চান তবে আপনি 'বা হয় ব্যবহার করতে পারেন "। স্ট্রিংয়ের ভিতরে কোনও স্থান (বা উদ্ধৃতি) না থাকলে আপনি উদ্ধৃতিগুলি বাদ দিতে পারেন।
ওকাসো প্রোটাল

68
এফওয়াইআই, একাধিক প্যারাম ব্যবহার করতে, এই বাক্যবিন্যাসটি ব্যবহার করুন:param([string]$env,[string]$s3BucketName)
জোশ প্যাডনিক

3
এটি "-ফাইল" অনুপস্থিত। আমি এটি যুক্ত না করা পর্যন্ত এটি আমার পক্ষে কাজ করে না। সম্পূর্ণ কোডটি দেখুন: পাওয়ারশেল.এক্সই-ফাইল ফাইলস ইউটিউনস ফরওয়ার্ড.ps1-পদক্ষেপ 15
চার্লস

2
@ চার্লস ইঙ্গিতটির জন্য ধন্যবাদ। আপনি ঠিক বলেছেন: -fileকলটি অনুপস্থিত। কল ছাড়াই পাওয়ারশেল সংস্করণ 1.0 এর সাথে কাজ করতে পারে তবে আমি এটি পরীক্ষা করতে পারি না। উত্তর আপডেট করেছেন।
ওকাসো প্রোটাল

363

আপনি এছাড়াও $argsপরিবর্তনশীল ব্যবহার করতে পারেন (এটি অবস্থানের পরামিতিগুলির মতো):

$step=$args[0]

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + $step
}

তারপরে এটি কল হতে পারে:

powershell.exe -file itunersforward.ps1 15

56
গ্রহণযোগ্য সমাধানের চেয়ে এটি সহজ পাওয়া গেছে, প্লাস আপনি স্ক্রিপ্টের যে কোনও জায়গায় সরাসরি directly আরগস [0] ব্যবহার করতে পারেন (প্রথম লাইনের প্রয়োজন নেই)। পিএস: আর্গুমেন্ট হিসাবে স্ট্রিং পাস করার টিপ: এগুলি অবশ্যই একক উদ্ধৃতিতে আবদ্ধ থাকতে হবে।
ADTC

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

4
গৃহীত সমাধানে নামযুক্ত প্যারামগুলিও স্বয়ংক্রিয়ভাবে সহায়তা-
পিট

3
এই উত্তরটি এত বেশি মনোযোগ পাচ্ছে, দয়া করে সম্পর্কিতটি আরও অনেক সম্পূর্ণ যাচাই করে দেখুন। stackoverflow.com/questions/6359618/…
এমিলিয়ানো পোগি

15

ব্যাচ ফাইল (* .bat) বা সিএমডি থেকে কল স্ক্রিপ্ট

পাওয়ারশেল কোর

pwsh.exe -NoLogo -ExecutionPolicy Bypass -Command "./Script.ps1 -Param1 Hello -Param2 World"

pwsh.exe -NoLogo -ExecutionPolicy Bypass -Command "path-to-script/Script.ps1 -Param1 Hello -Param2 World"

শক্তির উৎস

powershell.exe -NoLogo -ExecutionPolicy Bypass -Command "./Script.ps1 -Param1 Hello -Param2 World"

powershell.exe -NoLogo -ExecutionPolicy Bypass -Command "path-to-script/Script.ps1 -Param1 Hello -Param2 World"


পাওয়ারশেল থেকে কল

পাওয়ারশেল কোর বা উইন্ডোজ পাওয়ারশেল

& path-to-script/Script.ps1 -Param1 Hello -Param2 World
& ./Script.ps1 -Param1 Hello -Param2 World

স্ক্রিপ্ট.পিএস 1 - স্ক্রিপ্ট কোড

param(
    [Parameter(Mandatory=$True, Position=0, ValueFromPipeline=$false)]
    [System.String]
    $Param1,

    [Parameter(Mandatory=$True, Position=1, ValueFromPipeline=$false)]
    [System.String]
    $Param2
)

Write-Host $Param1
Write-Host $Param2

6

পাওয়ারশেল তথ্য প্রকার বিশ্লেষণ করতে এবং সিদ্ধান্ত নিতে দেয়
অভ্যন্তরীণভাবে এর জন্য একটি 'ভেরিয়েন্ট' ব্যবহার করে ...
এবং সাধারণত একটি ভাল কাজ করে ...

param( $x )
$iTunes = New-Object -ComObject iTunes.Application
if ( $iTunes.playerstate -eq 1 ) 
    { $iTunes.PlayerPosition = $iTunes.PlayerPosition + $x }

বা যদি আপনার একাধিক পরামিতিগুলি পাস করার প্রয়োজন হয়

param( $x1, $x2 )
$iTunes = New-Object -ComObject iTunes.Application
if ( $iTunes.playerstate -eq 1 ) 
    { 
    $iTunes.PlayerPosition = $iTunes.PlayerPosition + $x1 
    $iTunes.<AnyProperty>  = $x2
    }

3

ফাইলে নিম্নলিখিত কোড সহ পাওয়ারশেল স্ক্রিপ্ট তৈরি করুন।

param([string]$path)
Get-ChildItem $path | Where-Object {$_.LinkType -eq 'SymbolicLink'} | select name, target

এটি একটি পাথ প্যারামিটার সহ একটি স্ক্রিপ্ট তৈরি করে। এটি প্রদত্ত পথের মধ্যে সমস্ত প্রতীকী লিঙ্কের পাশাপাশি প্রতীকী লিঙ্কের নির্দিষ্ট লক্ষ্য তালিকাভুক্ত করবে।


2

আপনি পাওয়ারশেল কমান্ড লাইনে সরাসরি একটি ভেরিয়েবল সংজ্ঞায়িত করতে পারেন এবং তারপরে স্ক্রিপ্টটি কার্যকর করতে পারেন। ভেরিয়েবলটিও সেখানে সংজ্ঞায়িত করা হবে। এটি আমাকে এমন একটি ক্ষেত্রে সহায়তা করেছিল যেখানে আমি স্বাক্ষরিত স্ক্রিপ্টটি সংশোধন করতে পারি না।

উদাহরণ:

 PS C:\temp> $stepsize = 30
 PS C:\temp> .\itunesForward.ps1

আইটিউনস ফরওয়ার্ড.পিএস 1 রয়েছে

$iTunes = New-Object -ComObject iTunes.Application

if ($iTunes.playerstate -eq 1)
{
  $iTunes.PlayerPosition = $iTunes.PlayerPosition + $stepsize
}

2
#ENTRY POINT MAIN()
Param(
    [Parameter(Mandatory=$True)]
    [String] $site, 
    [Parameter(Mandatory=$True)]
    [String] $application, 
    [Parameter(Mandatory=$True)]
    [String] $dir,
    [Parameter(Mandatory=$True)]
    [String] $applicationPool
)

#Create Web IIS Application
function ValidateWebSite ([String] $webSiteName)
{
    $iisWebSite = Get-Website -Name $webSiteName
    if($Null -eq $iisWebSite)
    {
        Write-Error -Message "Error: Web Site Name: $($webSiteName) not exists."  -Category ObjectNotFound
    }
    else
    {
        return 1
    }
}

#Get full path form IIS WebSite
function GetWebSiteDir ([String] $webSiteName)
{
 $iisWebSite = Get-Website -Name $webSiteName
  if($Null -eq $iisWebSite)
  {
  Write-Error -Message "Error: Web Site Name: $($webSiteName) not exists."  -Category ObjectNotFound
  }
 else
 {
  return $iisWebSite.PhysicalPath
 }
}

#Create Directory
    function CreateDirectory([string]$fullPath)
    {
    $existEvaluation = Test-Path $fullPath -PathType Any 
    if($existEvaluation -eq $false)
    {
        new-item $fullPath -itemtype directory
    }
    return 1   
}

function CreateApplicationWeb
{        
    Param(
        [String] $WebSite, 
        [String] $WebSitePath, 
        [String] $application, 
        [String] $applicationPath,
        [String] $applicationPool
        )
    $fullDir = "$($WebSitePath)\$($applicationPath)"
    CreateDirectory($fullDir)
    New-WebApplication -Site $WebSite -Name $application -PhysicalPath $fullDir -ApplicationPool $applicationPool -Force
}

$fullWebSiteDir = GetWebSiteDir($Site)f($null -ne $fullWebSiteDir)
{
    CreateApplicationWeb -WebSite $Site -WebSitePath $fullWebSiteDir -application $application  -applicationPath $dir -applicationPool $applicationPool
}

এটি কাজ করে \ তৈরি-অ্যাপ্লিকেশন-pool.ps1 -site xx_8010 অ্যাপ্লিকেশন AppTest -dirtestDir -applicationPool TestAppPool।
Norberto Castellanos
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.