Хранение только \\ servername \ share \ в новом массиве в Powershell - PullRequest
0 голосов
/ 07 июня 2019

Я создаю инструмент, который позволит мне запрашивать значения домашнего каталога нашего пользовательского объекта AD и домашних каталогов связанного файлового сервера для создания отчетов и управления.

Я запросил AD и сохранил массив всех значений homedirectory и samaccountname для учетных записей в наших двух подразделениях.

Далее я вытащил значения $homedirectory и провел их через split, используя регулярное выражение:

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

Теперь у меня есть длинный список, который отформатирован следующим образом:

\\ servername1 \ имя_общего_ресурса
servername1
имя_общего_ресурса
username1

\\ servername1 \ имя_общего_ресурса
servername1
имя_общего_ресурса
username2

\\ servername2 \ имя_общего_ресурса
servername2
имя_общего_ресурса
username3

и т.д ...

Мне нужно сохранить все значения \ servername \ sharename в новом массиве для дальнейшей работы (уникальные значения, запросы для получения серверов / общих ресурсов, с которыми мне нужно будет работать get-childitem, и т. Д.).

Я проверил данные, и даже с некоторым различием в количестве папок в общих папках все нужные мне результаты находятся в 1-й и 6-й строках. Итак, строки 1, 6, 11, 16, 21, 26 и т. Д. ... из сотен строк результирующего списка.

И все же у меня возникают проблемы с тем, чтобы вытащить эти строки и сохранить их для дальнейшего использования. Я не выполнил много работы по синтаксическому анализу массивов и текста, и я был бы признателен за указатель в правильном направлении.

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Если опубликованный вывод хранится в массиве ($list) строк, вы можете легко получить доступ к нужным данным и сохранить их в другом массиве.

$ArrayOfPaths = $list -match "^\\"
$ArrayOfPaths | Get-Unique  # Lists only unique values

Кроме того, вы можете получить доступ к индексам, если целевые значения находятся в предсказуемых местах в массиве. Здесь они встречаются после каждых 5 индексов.

$ArrayOfPaths = for ($i = 0; $i -lt $list.count; $i+=5) {
    $list[$i]
}
1 голос
/ 07 июня 2019

Я не проверял это, но это может помочь. Используйте $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
...