PowerShell Liste der freigegebenen Ordner abrufen

Ich versuche, eine Liste von Ordnern abzurufen, die für eine Dateifreigabe freigegeben sind. Im Moment habe ich zwei Testordner:

\\MYPC\Test1

\\MYPC\Test2

Dies ist der Code, den ich im Moment habe:

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

Write-Host $FolderList

Aber das kommt mit "kann den Pfad nicht finden". Ich kann Beispiele dafür sehen, wie dies für \\Server\Share als Verzeichnis gemacht wird, aber ist es möglich, einfach nach \\Server zu suchen?

Author: JasonMArcher, 2014-06-17

9 answers

Versuche das:

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

Ref: Listen Sie die Freigaben in Windows mit PowerShell auf

 24
Author: Tamerz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-01-22 12:26:48

Es gibt nur eine Möglichkeit, Freigaben aus der Ferne von der mir bekannten Befehlszeile aufzuzählen, und das ist mit 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.

Dies ist für sich genommen nicht besonders analysierbar, aber Sie können es in ein Array werfen, um die Daten zeilenweise zu verarbeiten:

$sharedFolders = (NET.EXE VIEW \\enetsqnap01) 

Sie haben jetzt ein Array und ab $sharedFolders[7] haben Sie Ihre Freigaben. Sie könnten dann split für so etwas wie ein doppeltes Leerzeichen verwenden-es ist unwahrscheinlich, dass es in einem Freigabennamen selbst angezeigt wird, und sollte funktionieren, es sei denn, Ihr Freigabenname ist sehr lang, nur lassen Sie ein einzelnes Leerzeichen zwischen dem Freigabenamen und dem Feld type:

$sharedFolders[7].split('  ')[0]
Backups

Sie können diese mit einem ForEach und einer bedingten Logik verarbeiten. Es wäre nicht perfekt, aber es sollte für die meisten Anwendungsfälle funktionieren.

Der Kürze halber, um nur die Dateinamen an die Konsole auszugeben:

(net view \\enetsqnap01) | % { if($_.IndexOf(' Disk ') -gt 0){ $_.Split('  ')[0] } }
 16
Author: Mark Henderson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-06-17 02:58:41

Wenn Sie die Freigaben des lokalen Computers finden möchten, können Sie einfach Get-SmbShare:

> Get-SmbShare

Name                          ScopeName                     Path                          Description
----                          ---------                     ----                          -----------
ADMIN$                        *                             C:\WINDOWS                    Remote Admin
C$                            *                             C:\                           Default share
 11
Author: Klas Mellbourn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-05-09 14:46:58

Erweiterung Mark Henderson Antwort:

$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
Author: DingoCC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-20 10:17:25

Danke an Mark Henderson für seine Lösung. Ich habe eine Wrapper-Funktion hinzugefügt, um diesen Funktionsaufruf PowerShell-freundlicher zu gestalten. Ich habe einen anderen Ansatz verwendet, um die Daten aufzubrechen (komplexer, nicht besser); Das kann leicht basierend auf Präferenzen umgeschaltet werden.

clear-host
function Get-SharedFolder {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [string]$ComputerName 
        ,
        [Parameter(Mandatory = $false)]
        [switch]$GetItem
        ,
        [Parameter(Mandatory = $false)]
        [string[]]$ColumnHeadings = @('Share name','Type','Used as','Comment')  #I suspect these differ depending on OS language?  Therefore made customisable
        ,
        [Parameter(Mandatory = $false)]
        [string]$ShareName = 'Share name' #tell us which of the properties relates to the share name
        #,
        #[Parameter(Mandatory = $false)]
        #[string[]]$Types = @('Disk') # again, likely differs with language.  Also there may be other types to include?
    )
    begin {
        [psobject[]]$Splitter = $ColumnHeadings | %{
            $ColumnHeading = $_
            $obj = new-object -TypeName PSObject -Property @{
                Name = $ColumnHeading
                StartIndex = 0
                Length = 0
            }
            $obj | Add-Member -Name Initialise -MemberType ScriptMethod {
                param([string]$header)
                process {
                    $_.StartIndex = $header.indexOf($_.Name)
                    $_.Length = ($header -replace ".*($($_.Name)\s*).*",'$1').Length
                }
            }
            $obj | Add-Member -Name GetValue -MemberType ScriptMethod {
                param([string]$line)
                process {
                    $line -replace ".{$($_.StartIndex)}(.{$($_.Length)}).*",'$1'
                }
            }
            $obj | Add-Member -Name Process -MemberType ScriptMethod {
                param([psobject]$obj,[string]$line)
                process {
                    $obj | Add-Member -Name $_.Name -MemberType NoteProperty -Value ($_.GetValue($line))
                }
            }
            $obj
        }
    }
    process {
        [string[]]$output = (NET.EXE VIEW $ComputerName)
        [string]$headers = $output[4] #find the data's heading row
        $output = $output[7..($output.Length-3)] #keep only the data rows
        $Splitter | %{$_.Initialise($headers)}
        foreach($line in $output) { 
            [psobject]$result = new-object -TypeName PSObject -Property @{ComputerName=$ComputerName;}
            $Splitter | %{$_.Process($result,$line)}
            $result | Add-Member '_ShareNameColumnName' -MemberType NoteProperty -Value $ShareName
            $result | Add-Member 'Path' -MemberType ScriptProperty -Value {("\\{0}\{1}" -f $this.ComputerName,$this."$($this._ShareNameColumnName)")}
            $result | Add-Member 'Item' -MemberType ScriptProperty -Value {Get-Item ($this.Path)}
            $result | Add-Member -MemberType MemberSet -Name PSStandardMembers -Value ([System.Management.Automation.PSMemberInfo[]]@(New-Object System.Management.Automation.PSPropertySet(‘DefaultDisplayPropertySet’,[string[]](@('ComputerName','Path') + $ColumnHeadings))))
            $result
        }
    }
}

[string[]]$myServers = 'myServer1','myServer2' #amend this line to get the servers you're interested in
[psobject[]]$shares = $myServers | Get-SharedFolder
write-host 'List of Shares' -ForegroundColor Cyan
$shares  | ft -AutoSize
write-host 'Shares as Get-Item output' -ForegroundColor Cyan
$shares  | select -expand Item
 3
Author: JohnLBevan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-03-20 10:17:03

Unter Windows 8 oder höher und Windows Server 2012 oder höher können Sie Get-SmbShare aus dem SmbShare-Modul verwenden.

 1
Author: JamieSee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-09-27 20:40:01

Windows-Ressourcen-Kit-tool: rmtshare.

Entweder unter id mit Administratorberechtigungen auf dem Remote-Server ausführen oder eine ipc$ - Verbindung zum Remote-Server herstellen.

rmtshare \\servername
 0
Author: Windows Admin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-01-22 12:29:35

Hier ist ein PowerShell One Liner, der net view verwendet, um alle Remote-Freigaben aufzuzählen, die ein Benutzer sehen kann - bedeutet nicht, dass er Zugriff hat.

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

Wenn Sie sehen möchten, ob sie (mindestens) Lesezugriff haben, können Sie Folgendes ausführen:

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)}}}

Wenn Sie die gespeicherte Ausgabe benötigen, können Sie sie jederzeit an Export-CSV weiterleiten, indem Sie nach der letzten Klammer Folgendes einschalten:

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

Das Ganze ist nicht perfekt, wenn net view einen Fehler auslöst, aber ich habe es basierend auf den Kommentaren hier geschrieben und es funktioniert ziemlich gut und ist hilfreich für das, was ich brauche, also dachte ich, ich würde teilen. :)

 0
Author: Ahren Bader-Jarvis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-04-08 20:22:36

Keine wirkliche Antwort.

Nur ein paar Leckerbissen. Und einige Dinge, die NICHT funktionierten.

Hat nicht funktioniert: get-WmiObject

PS C:\> get-WmiObject -class Win32_Share -computer myserver.example.com

Hat nicht funktioniert: get-fileshare

Https://docs.microsoft.com/en-us/powershell/module/storage/get-fileshare

Hat nicht funktioniert: get-smbshare

Https://docs.microsoft.com/en-us/powershell/module/smbshare/get-smbshare

Funktionierte: Cygwin / Mobaxterm

Moba - ({[24h]}https://mobaxterm.mobatek.net/) wird auf Dateifreigaben gut zugreifen.

"listen Sie alle verfügbaren Freigaben für diesen Server auf" mode Beide Formen funktionieren:

$ ls //myserver.example.com/
a b c

$ ls '\\myserver.example.com\'
a b c

"listen Sie den Inhalt einer BESTIMMTEN Freigabe auf diesem Server auf" mode Beide Formen funktionieren:

$ ls //myserver.example.com/a
foo bar baz

$ ls '\\myserver.example.com\a'
foo bar baz

Vorteile: Moba unterscheidet NICHT zwischen dem Modus" Alle verfügbaren Freigaben für diesen Server auflisten "und dem Modus" Den Inhalt einer BESTIMMTEN Freigabe auf diesem Server auflisten". -- Was ein großes Hindernis zu sein scheint PowerShell.

Nachteile:

  • Extra installieren
  • Nicht PowerShell. Rein-text. Keine objektähnliche. NET / Windows-Methode, um dies überhaupt zu tun.

Funktionierte: net view

Vorteile:

  • vorinstalliert unter Windows

Nachteile: Nicht PowerShell. Rein-text. Keine objektähnliche. NET / Windows-Methode, um dies überhaupt zu tun.

 -1
Author: StackzOfZtuff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2021-02-03 11:31:50