none
Dateien anzeigen, die über die Freigabe remote geöffnet sind RRS feed

  • Frage

  • Hallo,

    ich sollte abfragen welche Dateien über die Freigabe geöffnet sind. Also wie das Ergebnis "Computerverwaltung - System - Freigegebene Ordner - Geöffnete Dateien" bzw. "Freigabe- und Speicherverwaltung - Geöffnete Dateien verwalten..." unter Win2008R2 auf dem Mausweg.

    Gruß

    Armin

    Dienstag, 17. April 2012 06:13

Antworten

  • Das Geht mit dem Adsi Provider, WinNT und dem LanmanServer
    Code nachträglich Korrigiert ! 17.April.2012 Siehe Unten!

    $server = "."
    $adsi = [adsi]"WinNT://$server/LanmanServer"
    
    # User and Computer Sessions
    $adsi.psbase.invoke("sessions") | foreach {
      $user = $_.gettype().invokeMember("user","GetProperty",$null,$_,$null)
      $computer = $_.gettype().invokeMember("computer","GetProperty",$null,$_,$null)
      "" | select @{n="Name";e={$Name}},@{n="User";e={$user}},@{n="Computer";e={$computer}}
    } | format-table -auto
    
    
    # OpenFile Resources
    $adsi.Invoke("Resources") | foreach {
      $Name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
      $Path = $_.GetType().InvokeMember("Path", 'GetProperty', $null, $_, $null)
      $User = $_.GetType().InvokeMember("User", 'GetProperty', $null, $_, $null)
      $LockCount = $_.GetType().InvokeMember("LockCount", 'GetProperty', $null, $_, $null)
      "" | select @{n="Name";e={$Name}},@{n="User";e={$user}},@{n="Path";e={$Path}},@{n="LockCount";e={$LockCount}}
    } | format-table -auto

    Mit ADSI Kannst du aber keine geöffneten Files schliessen!

    Desshalb sind eventuell die folgenden Links besser

    http://waynes-world-it.blogspot.de/2008/07/enumerating-file-server-resources.html
    http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/32bbfb59-f1c1-49ae-b195-db276abddb25/

    Der zweite Link enthält eine erweiterte Version des Codes aus dem ersten Link. Dort betsteht die Lösung aber (unnötigerweise) aus zwei Dateien (.ps1 und .vb)


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    • Als Antwort markiert AucheinName Dienstag, 17. April 2012 12:01
    • Bearbeitet Peter Kriegel Mittwoch, 18. April 2012 05:18
    Dienstag, 17. April 2012 09:14

Alle Antworten

  • Das Geht mit dem Adsi Provider, WinNT und dem LanmanServer
    Code nachträglich Korrigiert ! 17.April.2012 Siehe Unten!

    $server = "."
    $adsi = [adsi]"WinNT://$server/LanmanServer"
    
    # User and Computer Sessions
    $adsi.psbase.invoke("sessions") | foreach {
      $user = $_.gettype().invokeMember("user","GetProperty",$null,$_,$null)
      $computer = $_.gettype().invokeMember("computer","GetProperty",$null,$_,$null)
      "" | select @{n="Name";e={$Name}},@{n="User";e={$user}},@{n="Computer";e={$computer}}
    } | format-table -auto
    
    
    # OpenFile Resources
    $adsi.Invoke("Resources") | foreach {
      $Name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
      $Path = $_.GetType().InvokeMember("Path", 'GetProperty', $null, $_, $null)
      $User = $_.GetType().InvokeMember("User", 'GetProperty', $null, $_, $null)
      $LockCount = $_.GetType().InvokeMember("LockCount", 'GetProperty', $null, $_, $null)
      "" | select @{n="Name";e={$Name}},@{n="User";e={$user}},@{n="Path";e={$Path}},@{n="LockCount";e={$LockCount}}
    } | format-table -auto

    Mit ADSI Kannst du aber keine geöffneten Files schliessen!

    Desshalb sind eventuell die folgenden Links besser

    http://waynes-world-it.blogspot.de/2008/07/enumerating-file-server-resources.html
    http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/32bbfb59-f1c1-49ae-b195-db276abddb25/

    Der zweite Link enthält eine erweiterte Version des Codes aus dem ersten Link. Dort betsteht die Lösung aber (unnötigerweise) aus zwei Dateien (.ps1 und .vb)


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    • Als Antwort markiert AucheinName Dienstag, 17. April 2012 12:01
    • Bearbeitet Peter Kriegel Mittwoch, 18. April 2012 05:18
    Dienstag, 17. April 2012 09:14
  • Ich muss den ADSI Code von oben Korrigieren!
    Dort werden "nur" die Sessions ausgelesen! Ein User = eine Session!
    Ein User kann aber mehrere Files Offen haben! Deshalb müssen die Ressourcen ausgelesen werden!

    $server = "."
    $adsi = [adsi]"WinNT://$server/LanmanServer"
    
    # User and Computer Sessions
    $adsi.psbase.invoke("sessions") | foreach {
      $user = $_.gettype().invokeMember("user","GetProperty",$null,$_,$null)
      $computer = $_.gettype().invokeMember("computer","GetProperty",$null,$_,$null)
      "" | select @{n="Name";e={$Name}},@{n="User";e={$user}},@{n="Computer";e={$computer}}
    } | format-table -auto
    
    
    # OpenFile Resources
    $adsi.Invoke("Resources") | foreach {
      $Name = $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
      $Path = $_.GetType().InvokeMember("Path", 'GetProperty', $null, $_, $null)
      $User = $_.GetType().InvokeMember("User", 'GetProperty', $null, $_, $null)
      $LockCount = $_.GetType().InvokeMember("LockCount", 'GetProperty', $null, $_, $null)
      "" | select @{n="Name";e={$Name}},@{n="User";e={$user}},@{n="Path";e={$Path}},@{n="LockCount";e={$LockCount}}
    } | format-table -auto


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    Dienstag, 17. April 2012 12:08
  • Hallo Peter,

    erstmal vielen Dank für Deine Hilfe.

    Gibt es auch noch einen Parameter, der mir die PID (Prozess-ID) auch noch anzeigen könnte?

    Gruß

    Armin

    Mittwoch, 18. April 2012 08:15
  • Ich glaube weder (User)Sessions noch OpenFiles (Resources) sind Prozesse ! Deshalb haben Sie auch keine Process ID!
    Was willst du denn mit der PID machen ?


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Mittwoch, 18. April 2012 10:27
  • ich möchte bei _Bedarf eine Datei schließen können. Vielleicht gibt es auch eine andere Möglichkeit.
    Donnerstag, 19. April 2012 07:11
  • Na das hört sich schon anders an!
    Dafür brachst die Openfile ID!
    Wie ich oben schon geschrieben habe kann ADSI keine Dateien schliessen.

    Die ID die du brauchst ist in dem Obigen Code bei Resources das Attribut Name!
    Dann kannst du mit dem DOS Befehl NET FILE <ID> /Close die Datei schliessen.

    Oder du benutzt den Code aus den Links die ich geposted habe, damit kannst du auch File schliessen.


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    • Als Antwort markiert AucheinName Montag, 23. April 2012 06:40
    • Tag als Antwort aufgehoben AucheinName Montag, 23. April 2012 06:40
    Donnerstag, 19. April 2012 07:35
  • Hallo Peter,

    genau das was ich wollte, ein offenes File mit "net file" schließen. Leider ist das Attribut "Name" der adsi nicht mit der "net file"  ID identisch.

    Gruß

    Armin

    Montag, 23. April 2012 06:49
  • Hallo Peter,

    sorry, vergiss meinen vorherigen Beitrag, ich hatte übersehen, dass es nur auf die Ordner zutrifft, die geöffneten Dateien haben die richtigen

    ID's.

    Vielen Dank nochmals

    Armin

    Montag, 23. April 2012 14:06