Há apenas uma maneira de enumerar compartilhamentos remotamente a partir da linha de comando que eu conheço, e é isso net view
:
C:\Users\mark.henderson>net view \\enetsqnap01
Shared resources at \\enetsqnap01
Share name Type Used as Comment
-------------------------------------------------------------------------------
Backups Disk
CallRecordings Disk
Download Disk System default share
home Disk Home
homes Disk System default share
Installs Disk
Justin Disk Copy of files from Justin laptop
michael Disk
Multimedia Disk System default share
Network Recycle Bin 1 Disk [RAID5 Disk Volume: Drive 1 2 3 4]
Public Disk System default share
Qsync Disk Qsync
Recordings Disk System default share
Sales Disk Sales Documents
SalesMechanix Disk
Server2012 Disk Windows Server 2012 Install Media
Usb Disk System default share
VMWareTemplates Disk
Web Disk System default share
The command completed successfully.
Isso não é particularmente analisável por si só, mas você pode jogá-lo em uma matriz para processar os dados linha por linha:
$sharedFolders = (NET.EXE VIEW \\enetsqnap01)
Agora você tem uma matriz e a partir de $sharedFolders[7]
suas ações. Você pode, então, split
usar um espaço duplo - é improvável que apareça no próprio nome de compartilhamento e deva funcionar, a menos que o nome do compartilhamento seja muito longo, deixando apenas um espaço entre o nome do compartilhamento e o campo type:
$sharedFolders[7].split(' ')[0]
Backups
Você pode processá-los usando um ForEach e alguma lógica condicional. Não seria perfeito, mas deve funcionar para a maioria dos casos de uso.
Por uma questão de brevidade, basta enviar os nomes dos arquivos para o console:
(net view \\enetsqnap01) | % { if($_.IndexOf(' Disk ') -gt 0){ $_.Split(' ')[0] } }