首页 > 解决方案 > 在 Powershell 的新数组中仅存储 \\servername\share\

问题描述

我正在构建一个工具,它允许我查询我们的 AD 用户对象的主目录值和相关文件服务器的主目录,以便进行报告和管理。

我查询了 AD 并为我们两个 OU 中的帐户存储了一个包含所有 homedirectory 和 samaccountname 值的数组。

接下来,我提取了$homedirectory值并使用正则表达式通过拆分运行它们:

$ServShare = $Homedirectory -Split '(^\\\\([a-z0-9_.$●-]+)\\([a-z0-9_.$●-]+)\\)'

现在我有一个长长的列表,其格式如下:

\\servername1\sharename
servername1
共享
名 username1

\\servername1\sharename
servername1
共享
名 username2

\\servername2\sharename
servername2
共享
名 username3

ETC...

我需要将所有 \servername\sharename 值存储在一个新数组中以供进一步工作(唯一值、查询以获取我需要运行的服务器/共享get-childitem等)。

我检查了数据,即使共享路径中的文件夹数量有所不同,我需要的所有结果都在第 1 行和第 6 行。因此,在结果列表的数百行中,第 1、6、11、16、21、26 等行。

然而,我很难把这些线拉出来并储存起来以供进一步使用。我没有做太多解析数组和文本的工作,我会很感激一个沿着正确方向的指针。

标签: arrayspowershellsplit

解决方案


我没有对此进行测试,但它可能会有所帮助。用于$ServShare.GetType()找出它是一个数组。

$UncList = @()    # Create an empty array to hold the UNC strings

foreach ($Homedirectory in $HomeDirectories) {
    $ServShare = $Homedirectory -Split '(^\\\\([a-z0-9_.$●-]+)\\([a-z0-9_.$●-]+)\\)'
    $UncList += $ServShare[1]
}

$UncList

推荐阅读