PowerShell 스크립트에 인수를 전달하는 방법은 무엇입니까?


445

iTunes가 30 초 빨리 감기되도록 하는 PowerShell스크립트 가 있습니다 itunesForward.ps1.

$iTunes = New-Object -ComObject iTunes.Application

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

프롬프트 라인 명령으로 실행됩니다.

powershell.exe itunesForward.ps1

명령 줄에서 인수를 전달하여 하드 코드 된 30 초 값 대신 스크립트에 적용 할 수 있습니까?

답변:


610

작동하는 것으로 테스트 :

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
매개 변수가 문자열이면 어떻게 되나요? 구문은 무엇입니까? -step '15'또는 -step "15"
Andrew Gray

7
@Andrew 먼저 매개 변수 유형을로 변경해야합니다 [string]. 그런 다음 문자열을 매개 변수로 전달하려면 '또는을 사용할 수 있습니다 ". 문자열 안에 공백이 없으면 따옴표를 생략 할 수도 있습니다.
Ocaso Protal

68
참고로, 여러 매개 변수를 사용하려면 다음 구문을 사용하십시오.param([string]$env,[string]$s3BucketName)
Josh Padnick

3
"-file"이 없습니다. 내가 이것을 추가 할 때까지 그것은 나를 위해 작동하지 않습니다. 완전한 코드를보십시오 : powershell.exe -file itunesForward.ps1-단계 15
Charles

2
@Charles 힌트를 주셔서 감사합니다. 당신이 맞습니다 : -file통화에서 누락되었습니다. 없는 전화는 Powershell 버전 1.0에서 작동하지만 테스트 할 수는 없습니다. 답변을 업데이트했습니다.
Ocaso Protal

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
허용 된 솔루션보다 쉽게 ​​찾을 수있는 PLUS PLUS 스크립트의 어느 곳에서나 $ args [0]을 직접 사용할 수 있습니다 (첫 번째 줄 필요는 없음). 추신 : 문자열을 인수로 전달하는 팁 : 작은 따옴표로 묶어야합니다.
ADTC

26
이 솔루션과 승인 된 솔루션이 모두 작동한다는 점에서 가장 큰 차이점은 위치별로 매개 변수를 읽는 반면 승인 된 솔루션은 이름으로이를 수행한다는 것입니다. 여러 매개 변수를 전달해야하는 경우 이름을 전달하는 것이 더 깨끗할 수 있습니다.
Florin Dumitrescu

4
또한 채우기 보려면 get-help 자동 승인 된 솔루션이라는 PARAMS
피트

3
이 답변은 많은 관심을 받고 있습니다. 훨씬 더 관련된 관련 답변을 확인하십시오. stackoverflow.com/questions/6359618/…
Emiliano Poggi

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"


Powershell에서 전화

Powershell 코어 또는 Windows Powershell

& 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

Powershell이 ​​데이터 유형을 분석하고 결정하게
내부적으로이를 위해 'Variant'을 사용합니다
.

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

파일에 다음 코드를 사용하여 powershell 스크립트를 작성하십시오.

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
}

작동합니다. \ create-application-pool.ps1 -site xx_8010 -application AppTest -dirtestDir -applicationPool TestAppPool
Norberto Castellanos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.