【问题标题】:Run PowerShell script from a CMD file - Error with argument type从 CMD 文件运行 PowerShell 脚本 - 参数类型错误
【发布时间】:2018-08-14 06:32:26
【问题描述】:

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

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

如您所见,onlyVDIhasVDI 来自 bool 类型。到目前为止,一切都很好。当我从 PowerShell 控制台启动脚本时,我可以执行以下操作(在此处更改客户名称和服务器名称):

.\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 : 无法处理参数的参数转换 '只有 VDI'。无法将值“System.String”转换为类型“System.Boolean”。 布尔参数只接受布尔值和数字,例如 $True, $假,1 或 0。 + CategoryInfo : InvalidData: (:) [kpi.ps1], ParentContainsErrorRecordException + FullyQualifiedErrorId : ParameterArgumentTransformationError,cop_kpi.ps1

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

【问题讨论】:

    标签: powershell batch-file cmd parameters boolean


    【解决方案1】:

    在 CMD 中,基本上一切都是字符串。 CMD 尤其无法识别 PowerShell 内置常量,例如 $true$false。由于没有将字符串 '0''1''$true''$false' 自动转换为布尔值,因此当您从 CMD/batch 调用代码时会出错。

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

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

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

    powershell.exe -File %~dp0%kpi.ps1 -Customer "foo" -EntryPointVDI "bar" -hasVDI
    

    【讨论】:

    • 有效! :) 非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2016-07-13
    • 1970-01-01
    • 2017-11-17
    • 2014-09-30
    • 2019-11-07
    • 2015-01-03
    相关资源
    最近更新 更多