Я пытаюсь получить список общих папок на файловом сервере и поместить их в массив. Вот код, который у меня есть на данный момент:

$FileServer = "ServerName"

[array]$FileServerShares = gwmi win32_Share -ComputerName $FileServer |
  Where-Object {$_.type -eq '0'} | 
  Where {$_.name -notlike "*$*"}

Write-Host $FileServerShares

Это выводит общие папки (кроме $ общих ресурсов), но вывод помещает их все в одну длинную переменную в одной строке.

Как мне поместить это в массив с каждой записью на новой строке?

Обновить:

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

$FileServer = "ServerName"

$FileServerSharesFullName = gwmi win32_Share -ComputerName $FileServer |
Where-Object {$_.type -eq '0'} |
Where {$_.name -notlike "*$*"} # This excludes the "dollar shares" from being selected

$FileServerShares = $FileServerSharesFullName.name | % {$_.ToString()}

Таким образом, каждое имя папок, к которым открыт общий доступ, теперь в массиве в $ FileServerShares.

1 ответ1

1

$FileServerShares уже является массивом (даже без спецификатора [array] ):

PS> $FileServerShares.getType()

IsPublic IsSerial Name                                     BaseType
-------- -------- ----                                     --------
True     True     Object[]                                 System.Array

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

$FileServer = "ServerName"

$FileServerShares = gwmi win32_Share -ComputerName $FileServer |
  Where-Object {$_.type -eq '0'} | 
  Where {$_.name -notlike "*$*"} |
  % { $_.ToString() }

Write-Host $FileServerShares

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .