拆分返回特定数量的元素

gba*_*abu 3 powershell split

我知道这是相对简单的任务,但我是 PowerShell 新手,在这种情况下互联网搜索并没有真正帮助我:(

我有以下字符串 -

server1.us.domain.com
server2.domain.com
Run Code Online (Sandbox Code Playgroud)

我想从这些中提取 dns 后缀,即。

us.domain.com
domain.com
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法。到目前为止我能到达的最接近的是

$a = 'us.domain.com'

PS C:\> $a.Split('.')
us
domain
com
Run Code Online (Sandbox Code Playgroud)

Mat*_*att 6

你很接近。您应该使用该 Split 方法的第二个参数。它指定要返回的元素数量。$a在本例中是“server1.us.domain.com”

PS C:\Users\mcameron> $a.Split('.',2)
server1
us.domain.com
Run Code Online (Sandbox Code Playgroud)

您可以调用返回数组的第二个元素来获取域名。

PS C:\Users\mcameron> $a.Split('.',2)[1]
us.domain.com
Run Code Online (Sandbox Code Playgroud)

一些替代解决方案

为了完整起见,另一种方法是事后加入元素。您也可以做其他简单的事情。在这种特殊情况下,虽然没有必要,但它们仍然是解决方案。

PS C:\Users\mcameron> ($a.Split(".") | Select -Skip 1) -join "."
us.domain.com
Run Code Online (Sandbox Code Playgroud)

还可以用.Substring(). 这依赖于.IndexOf()找到第一个周期的索引。

PS C:\Users\mcameron> $a.Substring($a.IndexOf(".") + 1)
us.domain.com
Run Code Online (Sandbox Code Playgroud)

还有一个小型的正则表达式解决方案。第一个周期之前什么都没有替换。

PS C:\Users\mcameron> $a -replace "^.+?\."
us.domain.com
Run Code Online (Sandbox Code Playgroud)