从CMD文件运行PowerShell脚本 - 参数类型出错

问题描述 投票:1回答:1

我正在尝试从.cmd文件运行PowerShell脚本。以下是我定义的脚本参数:

Param(
    [string]$Customer,
    [string]$EntryPointINT,
    [string]$EntryPointPRD,
    [string]$EntryPointVDI,
    [string]$LicenseServer,
    [bool]$onlyVDI,
    [bool]$hasVDI,
    [int]$insertHelper
)

如你所见,onlyVDIhasVDI来自bool类型。到现在为止还挺好。当我从PowerShell控制台启动脚本时,我可以执行以下操作(在此处更改了customername和servername):

.\kpi.ps1 -Customer "CustName" -EntryPointVDI "servername" -onlyVDI 0 -hasVDI 1 -insertHelper 1

这完全符合预期。所以现在我想从.cmd文件启动相同的脚本。它看起来如下:

powershell.exe -File %~dp0%kpi.ps1 -Customer "Custname" -EntryPointVDI "servername" -LicenseServer "sc005019" -onlyVDI 0 -hasVDI 0 -insertHelper 1

这会导致以下错误:

C:\***\***\***\kpi.ps1 : Cannot process argument transformation on parameter
'onlyVDI'. Cannot convert value "System.String" to type "System.Boolean".
Boolean parameters accept only Boolean values and numbers, such as $True,
$False, 1 or 0.
    + CategoryInfo          : InvalidData: (:) [kpi.ps1], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,cop_kpi.ps1

谁能解释一下为什么0上的onlyVDI是一个字符串?我已经尝试了所有的东西,试图用$False替换它......无法让它发挥作用。现在我已经将它定义为PowerShell脚本中的字符串,并将其作为cmd文件中的字符串传递,它可以作为一种解决方法,但它不干净。我想用[bool]数据类型运行它。

powershell batch-file cmd parameters boolean
1个回答
3
投票

在CMD中,基本上一切都是字符串。 CMD特别不能识别像$true$false这样的PowerShell内置常量。由于没有自动将字符串'0''1''$true''$false'转换为布尔值,因此当您从CMD /批处理中调用它时,代码会出错。

处理布尔参数的更好方法是将它们定义为switch parameters

Param(
    [string]$Customer,
    [string]$EntryPointINT,
    [string]$EntryPointPRD,
    [string]$EntryPointVDI,
    [string]$LicenseServer,

    [switch]$onlyVDI,
    [switch]$hasVDI,

    [int]$insertHelper
)

这样你可以通过传递或省略参数将它们设置为true或false:

powershell.exe -File %~dp0%kpi.ps1 -Customer "foo" -EntryPointVDI "bar" -hasVDI
© www.soinside.com 2019 - 2024. All rights reserved.