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?
9 answers
Versuche das:
get-WmiObject -class Win32_Share -computer dc1.krypted.com
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] } }
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
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
}
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
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.
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
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. :)
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.
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