首页 文章

如何将参数传递给PowerShell脚本?

提问于
浏览
314

有一个名为 itunesForward.ps1PowerShell 脚本使iTunes快进30秒:

$iTunes = New-Object -ComObject iTunes.Application

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

它使用快速行命令执行:

powershell.exe itunesForward.ps1

是否可以从命令行传递参数并将其应用于脚本而不是硬编码的30秒值?

3 回答

  • 2

    测试工作:

    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
    
  • 285

    你也可以使用 $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
    
  • 470

    让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
        }
    

相关问题