Как передать аргумент PowerShell script?
Там PowerShell
script с именем itunesForward.ps1
, что делает iTunes быстрой перемоткой вперед 30 секунд:
$iTunes = New-Object -ComObject iTunes.Application
if ($iTunes.playerstate -eq 1)
{
$iTunes.PlayerPosition = $iTunes.PlayerPosition + 30
}
Выполняется с подсказкой строки:
powershell.exe itunesForward.ps1
Можно ли передать аргумент из командной строки и применить его в script вместо значения hardcoded 30 секунд?
Ответы
Ответ 1
Протестировано как работающее:
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
Ответ 2
Вы также можете использовать переменную $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
Ответ 3
пусть 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
}
Ответ 4
Создайте скрипт powershell со следующим кодом в файле.
param([string]$path)
Get-ChildItem $path | Where-Object {$_.LinkType -eq 'SymbolicLink'} | select name, target
Это создает скрипт с параметром пути. В нем будут перечислены все символические ссылки в указанном пути, а также указана цель символической ссылки.
Ответ 5
Вы также можете определить переменную непосредственно в командной строке 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
}
Ответ 6
Сценарий вызова из файла ванны (*.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 или 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