PowerShellスクリプトに引数を渡す方法は?


444

あります PowerShellitunesForward.ps1iTunesを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
パラメータが文字列の場合はどうなりますか?構文は何ですか?それは-step '15'または-step "15"のようなものでしょうか
Andrew Gray

7
@Andrewまず、パラメータのタイプをに変更する必要があります[string]。次に、文字列をパラメータとして渡したい場合は、'またはを使用できます"。文字列内にスペース(または引用符)がない場合は、引用符を省略することもできます。
Ocaso Protal、2015

68
:FYI、複数のparamsを使用するには、この構文を使用param([string]$env,[string]$s3BucketName)
ジョシュPadnick

3
「-file」がありません。私がこれを追加するまで、私にはうまくいきません。完全なコードを参照してください。powershell.exe
Charles

2
@Charlesヒントをありがとう。あなたは正しい:-fileは通話から欠落しています。なしの呼び出しはPowershellバージョン1.0で動作する可能性がありますが、テストできません。回答を更新しました。
Ocaso Protal 2016

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の$ args [0]をスクリプトのどこにでも直接使用できます(最初の行である必要はありません)。PS:文字列を引数として渡す際のヒント:一重引用符で囲む必要があります。
ADTC、2012

26
これと受け入れられたソリューションの両方が機能します。主な違いは、これは位置によってパラメーターを読み取るのに対し、受け入れられたソリューションは名前によってそれを行うということです。複数のパラメーターを渡す必要がある場合は、名前で渡す方がきれいな場合があります。
Florin Dumitrescu 2013年

4
承認されたソリューションの名前付き
Pete

3
この回答は非常に注目を集めています。より完全な関連する回答をチェックしてください。stackoverflow.com/questions/6359618/...
エミリアーノポッジ

15

バッチファイル(* .bat)またはCMDからスクリプトを呼び出す

Powershellコア

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 Coreまたは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にデータ型の分析と決定を任せます
内部
的にはこれに「バリアント」を使用します... そして一般的に良い仕事をします...

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.