【问题标题】:Exception calling "Substring" with "2" argument(s):使用“2”参数调用“子字符串”的异常:
【发布时间】:2016-02-25 09:39:47
【问题描述】:

我正在尝试根据名字和姓氏创建用户名。我只想要用户名的第一个首字母。当我尝试下面的代码时,我得到了这个错误

Import-Csv "C:\Users\Alex.piwowar.adm.j2global\desktop\ExcelMicroADAdd.csv" | ForEach-Object{
    $First=$_."First"
    $Last=$_."Last"
    $Location=$_."Location"
    $Title=$_."Title"
    $Department=$_."Department"
    $ManagerName=$_."Manager"
    $Company=$_."Company"

    $FirstIntitial = $First.Substring(0,1)
}

据我了解,我输入的内容将从$First 的开头开始,然后移到应该是第一个字母的位置。

我是不是想错了?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    您对代码应该如何工作的断言是正确的。我在这里的假设是 $first 是一个零长度的字符串。我可以通过执行以下操作得到此错误:

    "".Substring(0,1)
    

    错误说明字符串不够长,无法返回一个字符。零长度可以解释这一点。

    可能查看您的源数据或在失败时调试$first/$_.First。此外,您不需要在单个单词属性上使用引号。只是带有特殊字符或空格的那些。

    一旦你解决了这个问题......如果你只想要第一个字符,尽管你可以将字符串视为字符数组来只返回第一个字符。我在制作新帐户脚本时这样做

    $FirstIntitial = $First[0]
    

    【讨论】:

    • 这似乎奏效了。如何将 $FiristIntial 更改为大写?
    • @user71317 $First[0].ToUpper()
    • 我收到错误 - 方法调用失败,因为 [System.Char] 不包含名为 ToUpper 的方法
    • @user71317 很抱歉。 ([string]$First[0]).ToUpper()$First.Substring(0,1).ToUpper() 应该可以工作。
    猜你喜欢
    • 2019-11-14
    • 2016-11-01
    • 1970-01-01
    • 2017-08-07
    • 2014-07-29
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    相关资源
    最近更新 更多