2014-06-17 01:51:35 +0000 2014-06-17 01:51:35 +0000
19
19
Advertisement

PowerShell получит список общих папок.

Advertisement

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

\MYPC\Test1

\MYPC\Test2

Это код, который у меня есть на данный момент:

$FileServer = Read-Host "Enter file server to search"
$FolderList = Get-ChildItem -Path $FileServer

Write-Host $FolderList

Но в результате получается “не могу найти путь”. Я вижу примеры, как сделать это для \Server\Share в качестве каталога, но можно ли просто искать \Server?

Advertisement
Advertisement

Ответы (8)

24
24
24
2014-06-17 02:38:03 +0000

Попробуй это:

get-WmiObject -class Win32_Share -computer dc1.krypted.com

Ref: List Shares in Windows w/ PowerShell _

14
14
14
2014-06-17 02:58:41 +0000

Есть только один способ перечислить акции удаленно из командной строки, о котором я знаю, и это с 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.

Это не особенно придирчиво само по себе, но вы можете бросить его в массив для обработки данных построчно:

Теперь у вас есть массив, и начиная с $sharedFolders[7], у вас есть общие ресурсы. Затем вы можете использовать split на чем-то вроде двойного пробела - маловероятно, что оно появится в самом имени ресурса, и должно работать, если только ваше имя ресурса не очень длинное, оставляя только один пробел между именем ресурса и полем типа:

$sharedFolders = (NET.EXE VIEW \enetsqnap01)

Вы можете обрабатывать их, используя ForEach и некоторую условную логику. Это не было бы идеально, но должно работать для большинства случаев использования.

Для краткости, чтобы просто вывести имена файлов на консоль:

$sharedFolders[7].split(' ')[0]
Backups
8
Advertisement
8
8
2016-05-09 14:46:58 +0000
Advertisement

Если вы хотите найти общий доступ к локальной машине, вы можете просто сделать Get-SmbShare:

> Get-SmbShare

Name ScopeName Path Description
---- --------- ---- -----------
ADMIN$ * C:\WINDOWS Remote Admin
C$ * C:\ Default share
3
3
3
2015-09-15 02:19:32 +0000

Расширяем на Ответ Марка Хендерсона :

$Servers = ( Get-ADComputer -Filter { DNSHostName -Like '*' } | Select -Expand Name )
foreach ($Server in $Servers)
{
    (net view $Server) | % { if($_.IndexOf(' Disk ') -gt 0){ $_.Split(' ')[0] } } | out-file C:\file_shares\$Server.txt
}
3
Advertisement
3
3
2016-05-20 22:20:09 +0000
Advertisement
1
1
1
2018-09-27 20:40:01 +0000

На Windows 8 или выше и Windows Server 2012 или выше вы можете использовать Get-SmbShare из модуля SmbShare.

0
Advertisement
0
0
2019-04-08 20:22:36 +0000
Advertisement

Вот один лайнер PowerShell, который использует сетевое представление для перечисления всех удаленных разделяемых ресурсов, которые может видеть пользователь - это не значит, что у него есть доступ.

net view | Where {$_ -like "\*"} | %{$comp = $_.Split(" ")[0]; net view $comp | Where {$_ -like "*Disk*"} | %{$share = $_.Split(" ")[0]; $fullpath = Join-Path $comp $share; $fullpath}}

Если вы хотите посмотреть, есть ли у них (по крайней мере) доступ на чтение, вы можете запустить его:

Net view | Where {$_ -like "\*"} | %{$comp = $_.Split(" ")[0]; net view $comp | Where {$_ -like "*Disk*"} | %{$share = $_.Split(" ")[0]; $fullpath = Join-Path $comp $share; [PSCustomObject]@{Path=$fullpath;HasAccess=$(Test-Path $fullpath -ErrorAction SilentlyContinue)}}}

Если вам нужен сохраненный выход, вы всегда можете отправить его в Export-CSV, бросив следующее после последней скобки:

| Export-CSV "\path\to\file.csv" -NoTypeInformation

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

0
0
0
2015-04-10 17:14:25 +0000

Инструмент Windows Resource Kit: rmtshare .

Либо запустите под id с правами администратора на удаленном сервере, либо установите ipc$ соединение с удаленным сервером.

rmtshare \servername
Advertisement

Похожие вопросы

2
10
11
14
2
Advertisement
Advertisement