如何向PowerShell脚本传递一个参数?

有一个名为 "itunesForward.ps1 "的PowerShell脚本,使iTunes快进30秒。

$iTunes = New-Object -ComObject iTunes.Application

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

它是用提示行命令执行的。

powershell.exe itunesForward.ps1

是否有可能从命令行传递一个参数,并在脚本中应用它,而不是硬编码的30秒值?

解决办法

经测试为有效。

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
评论(13)

你也可以使用$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
评论(4)

让Powershell分析并决定数据类型

评论(0)

*从浴池文件(.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

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
评论(0)

在文件中创建一个包含以下代码的powershell脚本。

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

这将创建一个带有路径参数的脚本。 它将列出在所提供的路径内的所有符号链接,以及指定的符号链接目标。

评论(0)

你也可以直接在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
}
评论(0)