PowerShell स्क्रिप्ट में तर्क कैसे पास करें?


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
FYI करें, कई param([string]$env,[string]$s3BucketName)
पैरामेट्स

3
यह "-फाइल" गायब है। यह मेरे लिए काम नहीं करता है जब तक मैं यह जोड़ा। पूरा कोड देखें: powershell.exe -file itunesForward.ps1 -step 15
चार्ल्स

2
@Charles संकेत के लिए धन्यवाद। आप सही हैं: -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
स्वीकृत समाधान की तुलना में यह आसान पाया गया, प्लस आप स्क्रिप्ट में कहीं भी $ args [0] का सीधे उपयोग कर सकते हैं (पहली पंक्ति होने की कोई आवश्यकता नहीं है)। पुनश्च: तर्कों को तर्क के रूप में पारित करने पर टिप: उन्हें एकल उद्धरणों में संलग्न किया जाना चाहिए।
ADTC

26
यह और स्वीकृत समाधान दोनों काम करते हैं, मुख्य अंतर यह है कि यह स्थिति द्वारा मापदंडों को पढ़ता है, जबकि स्वीकृत समाधान नाम से करता है। जब कई मापदंडों को पारित करने की आवश्यकता होती है, तो नाम से गुजरना क्लीनर हो सकता है।
फ्लोरिन डुमिट्रेस्कु

4
स्वीकार किए गए समाधान में नामित पारमों को ऑटो-हेल्प भी मिलती है
पीट

3
इस जवाब पर इतना ध्यान दिया जा रहा है, कृपया संबंधित को देखें जो बहुत अधिक पूर्ण है। stackoverflow.com/questions/6359618/…
एमिलियानो पोगी

15

स्क्रिप्ट को बैच फ़ाइल (* .bat) या CMD से कॉल करें

पॉवरशेल कोर

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

Script.ps1 - स्क्रिप्ट कोड

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

आप सीधे PowerShell कमांड लाइन में एक चर को परिभाषित कर सकते हैं और फिर स्क्रिप्ट निष्पादित कर सकते हैं। चर को वहां भी परिभाषित किया जाएगा। इससे मुझे ऐसे मामले में मदद मिली जहां मैं एक हस्ताक्षरित स्क्रिप्ट को संशोधित नहीं कर सका।

उदाहरण:

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

iTunesForward.ps1 के साथ

$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।
नोर्बरटो कास्टेलानोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.