Cmd не передает аргументы скрипту PowerShell - PullRequest
0 голосов
/ 06 августа 2020

У меня есть сценарий powershell, который я хочу запустить из командной строки (cmd, а не powershell):

powershell.exe -NoLogo -NoProfile -ExecutionPolicy ByPass -File "MyScript.ps1" -ScriptParam1 2020 -ScriptParam2 "bla" -ScriptParam3 "blub"

Когда я вставляю этот код в PowerShell, все работает нормально, но когда я вставляю его в cmd , PowerShell запускается и запрашивает у меня параметры скрипта, потому что они обязательны. Почему эти аргументы не распознаются в cmd?

Вот содержимое MyScript

[CmdletBinding()]
param (
    [Parameter(Mandatory)]
    [int] $ScriptParam1,

    [Parameter(Mandatory)]
    [string] $ScriptParam2,

    [Parameter(Mandatory)]
    [string] $ScriptParam3
)

$PSVersionTable

1 Ответ

1 голос
/ 07 августа 2020

Потому что они находятся за пределами командного запроса, то есть вызова вашего скрипта.

Попробуйте так ...

# Contents of hello.ps1
Get-Content -Path 'D:\Scripts\hello.ps1'
# Results
<#
[CmdletBinding(SupportsShouldProcess)]

Param
(
    [Parameter(ParameterSetName="Domain",Mandatory=$true)]
    [string]$ScriptParam1,
    [Parameter(ParameterSetName="Domain",Mandatory=$true)]
    [string]$ScriptParam2,
    [Parameter(ParameterSetName="Domain",Mandatory=$true)]
    [string]$ScriptParam3
)



$host
$PSversionTable
Write-Host 'Hello World'
Get-Date
#>
powershell.exe -NoExit -NoLogo -NoProfile -ExecutionPolicy ByPass "D:\Scripts\hello.ps1 -ScriptParam1 param1 -ScriptParam2 param2 -ScriptParam3 param3"
# Results
<#
Name             : ConsoleHost
Version          : 5.1.19041.1
...

Key   : PSVersion
Value : 5.1.19041.1
...

Hello World
...
#>

powershell.exe -NoExit -NoLogo -NoProfile -ExecutionPolicy ByPass "D:\Scripts\hello.ps1 -ScriptParam1 param1 -ScriptParam2 param2 -ScriptParam3 param3"
# Results
<#
C:\>ver

Microsoft Windows [Version 10.0.19041.388]

C:\>powershell.exe -NoExit -NoLogo -NoProfile -ExecutionPolicy ByPass "D:\Scripts\hello.ps1 -ScriptParam1 param1 -ScriptParam2 param2 -ScriptParam3 param3"


Name             : ConsoleHost
Version          : 5.1.19041.1
...

Key   : PSVersion
Value : 5.1.19041.1
...

Hello World
...


C:\>ver

Microsoft Windows [Version 10.0.19041.388]

C:\>powershell.exe -NoExit -NoLogo -NoProfile -ExecutionPolicy ByPass "D:\Scripts\hello.ps1"

cmdlet hello.ps1 at command pipeline position 1
Supply values for the following parameters:
ScriptParam1: 1
ScriptParam2: 2
ScriptParam3: 3


Name             : ConsoleHost
Version          : 5.1.19041.1
...

Key   : PSVersion
Value : 5.1.19041.1
...

Hello World
...
#>

Анализ происходит немного иначе, когда вы уже находитесь в PowerShell экземпляр, чем при запуске из cmd.exe. Cmd.exe и сначала прочитать все это, а cmd.exe не знает, что это за -ScriptParam *, поэтому они игнорируются.

В соответствии с показанным примером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...