【问题标题】:Powershell - Cannot validate argument on parameter 'Name'. The number of characters (0) in the argument is too smallPowershell - 无法验证参数“名称”的参数。参数中的字符数 (0) 太小
【发布时间】:2012-08-31 09:59:33
【问题描述】:

这是我使用 powershell 脚本的第一天 我正在尝试使用 VMM Cmdlet Get-SCVirtualMachine 当我像

一样使用它时效果很好
PS C:\> $VM = Get-SCVirtualMachine -Name "VM01"

但是当我尝试时它给了我一个错误

PS C:\> $vmName = 'VM01'
PS C:\> $VM = Get-SCVirtualMachine -Name "$vmName"

我得到的错误是

无法验证参数“名称”的参数。字符数 (0) 中的参数太小。指定一个长度为 大于或等于“1”,然后重试该命令。

谁能告诉我我做错了什么?

谢谢

【问题讨论】:

  • $vmName.GetType() 打印什么?还有$vmName | Get-Member.
  • 我无法使用提供的代码重现错误。当参数值为$null 或为空(长度为0)时,该错误消息是Name 参数上的[ValidateLength(1, x)] 属性的结果。变量 $vmName 在调用 cmdlet 之前以某种方式被重置,这对于您发布的代码是不可能的。如果不发布重现问题的实际原始代码,则无法回答此问题。
  • 正如其他人评论的那样,发布的代码有效。问题的一个可能原因是有一行将$vmname 定义为不同的类型。例如[bool]$vmname = $false 这可以通过在第二次定义之前使用Remove-Variable vmname 来解决。
  • 很确定@BenH 的想法是正确的
  • 函数调用不需要$vmName 上的引号......它应该已经是一个字符串

标签: powershell


【解决方案1】:

该命令看起来没问题,应该可以工作。您是作为脚本的一部分还是仅通过您发布的示例收到错误?

您提到您正在使用 Get-SCPerformanceData cmdlet,而您的示例使用了另一个 cmdlet。

尝试从参数中删除引号,有帮助吗?

【讨论】:

  • 尝试不带引号时出现以下错误:无法验证参数“名称”的参数。参数为空、空或参数集合的元素包含空值。提供一个不包含任何空值的集合,然后重试该命令。
  • 奇怪,你能用新的控制台测试吗?
【解决方案2】:

试试

PS C:\> $vmName = "VM01"
PS C:\> $VM = Get-SCVirtualMachine -Name $vmName

【讨论】:

  • 当我尝试这个时,我得到以下错误 >Cannot validate argument on parameter 'Name'。参数为 null、>empty 或参数集合的元素包含 >null 值。提供一个不包含任何 >null 值的集合,然后重试该命令。
【解决方案3】:

试试这个:

$vmName = '-Name VM01'
Get-SCVirtualMachine $vmName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2010-12-05
    相关资源
    最近更新 更多