PowerShell函数中的子串

时间:2015-02-18 09:41:03

标签: function powershell substring

我有一个功能正常的功能。 它从PowerShell GUI中的文本框中提取firstname的第一个字符和整个lastname,然后从两者中创建一个sAMAccountName。 现在我只需要生成的sAMAccountName中的前8个字符。

这是函数

Function Set-sAMAccountName {
    Param([Switch]$Csv=$false)
    if(!$Csv)
        {
        $GivenName = $txtFirstName.text
        $Surname = $txtLastName.text
        }
    else{}
    Switch($XML.Options.Settings.sAMAccountName.Style | Where{$_.Enabled -eq $True} | Select -ExpandProperty Format)
        {
        "FirstName.LastName"    {"{0}.{1}" -f $GivenName,$Surname}
        "FirstInitialLastName"  {"{0}{1}" -f ($GivenName)[0],$Surname}
        "LastNameFirstInitial"  {"{0}{1}" -f $Surname,($GivenName)[0]}
        Default                 {"{0}.{1}" -f ($GivenName)[0],$Surname}
        }
    }

有什么想法吗? 很多提前很多

2 个答案:

答案 0 :(得分:0)

Substring就是这样的:

你传递了你想要开始的地方的索引

你传递了你想要结束子串读数的索引(如果你没有传递任何东西,它将一直到字符串的长度结束)

所以在你的情况下,它将从索引0的索引8读取开始阅读:

$str = "a simple string"
$newString = $str.Substring(0,8)

我真的建议您阅读string操纵here

答案 1 :(得分:0)

好的,我现在知道了!

我添加了 - 和条件来检查sAMAccountName的长度,并说 -lt 8 ,现在它正在运行。 sAMAccountName现在是8个字符。

这是之前的代码:

    $txtName_TextChanged={
    Write-Verbose "Creating required account fields"

    if ($XML.Options.Settings.DisplayName.Generate -eq $True) {$txtDN.Text = Set-DisplayName}
    if ($XML.Options.Settings.sAMAccountName.Generate -eq $True) {$txtsAM.Text = (Set-sAMAccountName)}
    if ($XML.Options.Settings.UPN.Generate -eq $True) {$txtUPN.Text = Set-UPN}
}

改变之后:

    $txtName_TextChanged={
    Write-Verbose "Creating required account fields"

    if ($XML.Options.Settings.DisplayName.Generate -eq $True) {$txtDN.Text = Set-DisplayName}
    if ($XML.Options.Settings.sAMAccountName.Generate -eq $True -and $txtsAM.Text.Length -lt 8) {$txtsAM.Text = (Set-sAMAccountName)}
    if ($XML.Options.Settings.UPN.Generate -eq $True) {$txtUPN.Text = Set-UPN}
}