none
Ordnerfreigabe remote steuern via Powershell RRS feed

  • Frage

  • Hallo zusammen.

    In den vergangenen Tagen arbeite ich an einem Skript, mit dem auf verschiedenen Servern remote Ordner erstellt werden. Wir nutzen Windows Server 2008 R2, daher ist "SmbShare" nicht verfügbar und ein Rollout auf allen ca 300 Servern zwecks Genehmigungsprozess nicht durchführbar. In einigen anderen Threads war die Rede davon, "Get-WmiObject Win32_Share" zu nutzen, bisher schaffte ich es damit allerdings nichtmal, eine lokale Freigabe zu erstellen geschweige denn remote auf anderen Servern.

    Auf \\$Server\$Pfad\ wurde $Ordner erstellt, wie bekomme ich nun eine Freigabe auf $Ordner mit Name $FreigabenName erstellt, mit $UserA(modify) und $UserB(full control) und zudem "Authenticated Users" entfernt.

    Danach stehen dann noch die Sicherheitseinstellungen an, bin gespannt, ob das auch so ein Krampf wird.

    Lieber Gruß,

    Grunch

    Donnerstag, 10. August 2017 11:39

Antworten

Alle Antworten

  • Moin,

    also wenn mich nicht alles täuscht, ist das SMBShare-Module kein Feature von Server 201x, sondern von PowerShell 3.0, welches Du mittels WMF-Update auch auf Server 2008R2 ausbringen kannst.

    Davon abgesehen, kann das SMBShare-Modul auch remote verwendet werden, dafür muss es auf der Zielmaschine nicht vorhanden sein, sondern nur da, wo Du den Befehl ausführst.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Donnerstag, 10. August 2017 12:42
  • Hallo Evgenij,

    leider ist dem nicht so. Nachdem ich das Windows Management Framework 5.0 installierte und nach diversen Versuchen, dieses SMBShare-Module irgendwie zu laden, bin ich nach einiger Recherche davon überzeugt, daß es in meiner Umgebung nicht funktionieren wird. Diese Informationen habe ich letztlich gefunden:

    Minimum supported client: Windows 8
    Minimum supported server: Windows Server 2012

    Da wir fast ausschließlich Windows 7 und Windows Server 2008 R2 (und ein paar ältere) nutzen, sehe ich somit keine Möglichkeit dieses Modul zu starten. Wenn du mehr Informationen hast, bin ich gerne bereit, sie zu testen.

    Auch für alternative Möglichkeiten bin ich offen, solange sie irgendwie mit Powershell realisiert werden können.

    Donnerstag, 10. August 2017 14:02
  • Auch für alternative Möglichkeiten bin ich offen, solange sie irgendwie mit Powershell realisiert werden können.

    Naja, mit Win32_Share, Get-ACL und Set-ACL, wie hier beschrieben: 

    http://windowsitpro.com/powershell/managing-file-shares-windows-powershell 


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Donnerstag, 10. August 2017 14:53
  • Mir geht es um Freigabeberechtigungen, nicht um Sicherheitseinstellungen.

    $share = Get-WmiObject Win32_Share -List -ComputerName "Computer4711"
    $share.create("C:\Temp\Ordner1", "Freigabe1", 0)
    Dieser Befehlssatz erstellt mir zwar eine Freigabe, aber ich finde keine Referenz dazu, wie ich die Freigabeberechtigungen verändern kann, daher schreibe ich ja hier
    $acl = Get-Acl \\Computer4711\Temp\Ordner1                      
    $permission = "User1","FullControl","Allow"
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    $acl.SetAccessRule($accessRule)
    $acl | Set-Acl \\Computer4711\Temp\Ordner1
    Dieser Befehlssatz erstellt ausschließlich Sicherheitseinstellungen.

    Dein Link "http://windowsitpro.com/powershell/managing-file-shares-windows-powershell" bezieht sich leider auch nur auf die Erstellung einer Freigabe und die Sicherheitseinstellungen, etwas weiter dann auf SmbShare, welches wie oben beschrieben nicht genutzt werden kann.

    Freitag, 11. August 2017 09:13
  • Moin,

    https://msdn.microsoft.com/en-us/library/aa389393(v=vs.85).aspx 

    Der letzte Parameter ist der Security Descriptor. Hier sind Methoden, um aus einer SDDL-Beschreibung ein SecurityDescriptor-Objekt zu erstellen: https://msdn.microsoft.com/de-de/library/windows/desktop/aa394403(v=vs.85).aspx 

    SDDL kennt man aus CACLS und so: https://msdn.microsoft.com/de-de/library/windows/desktop/aa379570(v=vs.85).aspx


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 11. August 2017 09:44
  • Verstehe ich das richtig, daß ich dann damit;

    [in, optional] Win32_SecurityDescriptor Access

    Access [in, optional]

    Security descriptor for user level permissions. A security descriptor contains information about the permissions, owner, and access capabilities of the resource. If this parameter is not supplied or is NULL, then Everyone has read access to the share. For more information, see Win32_SecurityDescriptor and Changing Access Security on Securable Objects.

    die nötigen Berechtigungen direkt bei der Erstellung setzen kann?

    Wie würde die Syntax bei meinem Beispiel dann aussehen?

    $share = Get-WmiObject Win32_Share -List -ComputerName "Computer4711"
    $share.create("C:\Temp\Ordner1", "Freigabe1", 0)

    Freitag, 11. August 2017 10:11
  • Moin,

    so was hier:

    $share_path = "C:\Temp\xtemp"
    $share_name = "XTEMP"
    $share_sddl = "D:AI(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;OICIID;0x1200a9;;;BU)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)"
    $sd = ([wmiclass]"Win32_SecurityDescriptorHelper").SDDLToWin32SD($share_sddl).Descriptor
    $share = Get-WmiObject Win32_Share -List
    $share.Create($share_path, $share_name,0,$null,"This share was created by WMI",$null,$sd)

    EDIT: -Computername muss natürlich sinnvollerweise ergänzt werden. Alternativ kann man auch mit Invoke-WMIMethod arbeiten.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com




    • Bearbeitet Evgenij Smirnov Freitag, 11. August 2017 11:10
    • Als Antwort markiert Grunch83 Freitag, 11. August 2017 15:32
    Freitag, 11. August 2017 11:04
  • Vielen Dank, das funktioniert in der Testumgebung schon recht gut. Ist es denn auch möglich einen Netzwerkpfad anzugeben, anstatt einem Lokalen? z.B. \\Server\Freigabe$\

    Da gibt er den Fehlercode 9 aus. (invalid name)

    Freitag, 11. August 2017 15:37
  • Vielen Dank, das funktioniert in der Testumgebung schon recht gut. Ist es denn auch möglich einen Netzwerkpfad anzugeben, anstatt einem Lokalen? z.B. \\Server\Freigabe$\

    Da gibt er den Fehlercode 9 aus. (invalid name)

    Moin,

    der "Pfad" (1. Argument) ist immer lokal, das ist ja der Ordnerpfad. Das 2. Argument bezieht sich immer auf den Server, gegen den die WMI-Abfrage läuft. Ich vermute mal, das Ziehen des WMI-Objektes von einem Remote-Computer bewirkt nicht, dass die Share auch dort angelegt wird?

    In diesem Fall wird die Punktnotation der .Create() Methode Dich vermutlich nicht weiterbringen, und Du musst mit Invoke-WMIMethod arbeiten.


    Evgenij Smirnov

    I work @ msg services ag, Berlin -> http://www.msg-services.de
    I blog (in German) @ http://it-pro-berlin.de
    my stuff in PSGallery --> https://www.powershellgallery.com/profiles/it-pro-berlin.de/
    Exchange User Group, Berlin -> http://exusg.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    Freitag, 11. August 2017 15:44