Потому что они находятся за пределами командного запроса, то есть вызова вашего скрипта.
Попробуйте так ...
# 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 *, поэтому они игнорируются.
В соответствии с показанным примером.