You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell的AD查询中用变量提取SamAccountName的后缀

动态提取AD用户SamAccountName中的后缀(含减号)

我帮你调整PowerShell命令,不用固定长度截取,而是动态识别减号位置来提取后缀,这里有两种实用的方法:

方法1:用字符串定位方法(简单直接)

这种方式直接找到第一个减号的位置,从该位置开始截取到字符串末尾,适配任意长度的前缀:

Get-ADUser -Identity john.dow-g -Server 'domaincontroller.com' -Properties * | 
    Select-Object @{Name="suffix"; Expression={$_.SamAccountName.Substring($_.SamAccountName.IndexOf('-'))}}

逻辑很清晰:

  • $_.SamAccountName.IndexOf('-')会定位到第一个减号-在字符串中的位置索引
  • Substring()从这个索引位置开始截取,就能得到包含减号在内的完整后缀(比如-g、-svr-z这类)

如果担心部分用户的SamAccountName没有减号导致报错,可以加个判断:

Get-ADUser -Identity john.dow-g -Server 'domaincontroller.com' -Properties * | 
    Select-Object @{Name="suffix"; Expression={
        if($_.SamAccountName.Contains('-')){
            $_.SamAccountName.Substring($_.SamAccountName.IndexOf('-'))
        } else {
            ""
        }
    }}

方法2:用正则表达式匹配(灵活适配复杂场景)

如果需要处理带多个减号的用户名(比如paul.douglas-steve-svr-z),正则表达式能精准匹配从第一个减号到结尾的内容:

Get-ADUser -Identity john.dow-g -Server 'domaincontroller.com' -Properties * | 
    Select-Object @{Name="suffix"; Expression={[regex]::Match($_.SamAccountName, '-.+$').Value}}

这里-.+$的意思是:匹配从减号开始,到字符串结尾的所有字符。如果用户名里没有减号,会返回空字符串,不会报错。

要是你需要批量处理多个用户,直接把Identity换成用户数组即可:

$targetUsers = @('john.dow-g', 'stephanie.adam-p', 'paul.douglas-steve-svr-z', 'jane.young-ac-a')
Get-ADUser -Identity $targetUsers -Server 'domaincontroller.com' -Properties * | 
    Select-Object SamAccountName, @{Name="suffix"; Expression={$_.SamAccountName.Substring($_.SamAccountName.IndexOf('-'))}}

内容的提问来源于stack exchange,提问作者Rindu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:03:54