Jump to content

Laufwerks mappings von Usern per Skript ändern


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo zusammen,


folgender Zustand:

Es existiert ein Fileserver "\\alterServer" auf den viele User per Freigabe zugreifen: \\alterServer\daten, \\alterServer\personal usw.

Jetzt soll dieser Fileserver gegen "\\neuerServer" getauscht werden. Die Freigaben werden identisch erstellt werden: \\neuerServer\daten, \\neuerServer\personal usw.


Gibt es die Möglichkeit per PS-Skript die Freigaben der User auszulesen und ändern zu lassen? Habe wirklich lange gesucht, aber nur wenig gefunden mit dem ich arbeiten kann.

Zwei Ansätze waren diese: Get-WmiObject Win32_MappedLogicalDisk oder Get-ChildItem -Path HKCU:\Network\ -Name.


Vielen Dank

P. S.: Für die Netzwerkdrucker hatte ich eine Lösung gefunden.
 

Link zu diesem Kommentar

Wieviele Leute sinds denn? Und wie wurden die Laufwerke bisher gemappt? Normalerweise kann man beim ANmelden per Skript doch die Laufwerke trennen und neu verbinden (oder per GPP). Dann ist das eine Entscheidung die du als Admin triffst. Falls der Nutzer sich dann selbst irgendwelche Laufwerke verbunden haben sollte ... SH.

Bye

Norbert

Link zu diesem Kommentar

Moin,

 

wobei das ja auch nicht besonders schwierig ist. Kriegt man zur Not sogar per Batch hin:

 

  • Auslesen der Mappings - net use liefert die Informationen; in Powershell etwa
    Get-PSDrive -PSProvider FileSystem | where { $_.DisplayRoot -like '\\*'}
  • UNC-Pfade isolieren (in PowerShell die DisplayRoot-Eigenschaft der obigen Objekte)
  • Alten String durch neuen ersetzen
  • Wenn UNC-Pfad den alten String enthält: Trennen und mit neuem Pfad neu mappen

Gruß, Nils

bearbeitet von NilsK
Link zu diesem Kommentar

Hallo Nils,

habe viele Ansätze, aber nicht das Große ganze:

 

#Setze Variablen:

$old_server = "alterServer"

​$new_server = "neuerServer"

 

# lese die alten netzwerk mappings in eine Variable

$mappings = (Get-WmiObject Win32_MappedLogicalDisk |  where{$_.ProviderName -match "alterServer"} | Select-Object -expandProperty ProviderName)

 

#oder nach deiner Variante

Get-PSDrive -PSProvider FileSystem | where { $_.DisplayRoot -like '\\alterServer'}

 

​#jetzt muß ich diese Werte in $mappings löschen, habe aber hier nicht die Ahnung wie genau

foreach($element in $mappings) { (New-Object -ComObject WScript.Network)

 

#nun müssen die alten gegen die neuen Pfade getauscht werden, aber auch keine Ahnung wie genau

foreach ($element in $mappings)  {$mapping.New-PSDrive ($element.replace("$old_server", "$new_server")) }

 

Aber das funktioniert so natürlich nicht, ich komme aber leider nicht weiter

Link zu diesem Kommentar

Moin,

 

du brauchst aus einem PowerShell-Skript ja kein WScript-Objekt aufzurufen. Remove-PSDrive sollte das Nötige tun. Und mit New-PSDrive solltest du das neue Mapping einrichten können. Ungetestet, aber sollte mich wundern, wenn es nicht so ist.

 

Den nötigen String für das neue Mapping erzeugst du so ähnlich, wie du es schon angedeutet hast. Die folgende Zeile gibt bei mir Daten in der gewünschten Form zurück:

foreach ($Drive in $mappings) { $Drive.DisplayRoot.Replace('alt', 'neu') }

Gruß, Nils

Link zu diesem Kommentar

Hallo Nils,

 

habe es jetzt so gelöst:

 

 

$oldserver = "alterServer"
$newserver = "neuerServer"
$oldunits = Get-ChildItem -Path HKCU:\Network\ -Name
ForEach ($unit in $oldunits)
{
 $oldmap = (Get-Itemproperty HKCU:\Network\$unit).RemotePath
 If ($oldmap -match $oldserver)
 {
     #Remove-PSDrive –Name $unit -Force
    (New-Object -ComObject WScript.Network).RemoveNetworkDrive($unit +":", $true, $true)
    New-PSDrive –Name $unit –PSProvider FileSystem –Root $oldmap.replace($oldserver,$newserver) –Persist
 }

 

 

So ganz zufrieden bin ich aber noch nicht. Melde mich nochmal.

Danke schon mal

Link zu diesem Kommentar

Hallo Nils,

 

habe es jetzt so gelöst:

 

 

$oldserver = "alterServer"

$newserver = "neuerServer"

$oldunits = Get-ChildItem -Path HKCU:\Network\ -Name

ForEach ($unit in $oldunits)

{

 $oldmap = (Get-Itemproperty HKCU:\Network\$unit).RemotePath

 If ($oldmap -match $oldserver)

 {

     #Remove-PSDrive –Name $unit -Force

    (New-Object -ComObject WScript.Network).RemoveNetworkDrive($unit +":", $true, $true)

    New-PSDrive –Name $unit –PSProvider FileSystem –Root $oldmap.replace($oldserver,$newserver) –Persist

 }

 

 

So ganz zufrieden bin ich aber noch nicht. Melde mich nochmal.

Danke schon mal

 

Verbesserungsvorschläge:

  • Entferne bei "Get-ChildItem" den Parameter "-Name", damit das komplette Objekt gespeichert wird. Damit ersparst du Dir die erneute Registry Abfrage von "Get-Itemproperty" $oldmap = (Get-Itemproperty HKCU:\Network\$unit).RemotePath
If ($oldmap.RemotePath -match $oldserver)
  • Alternativ von Remove-PSDrive ( Funktoniert das bei euch? Bei mir nicht mal mit "-force"! ) und dem ComObjekt könntest du "net use X: /delete" nutzen.
Start-Process -FilePath "net.exe" -ArgumentList "use $($unit.Name): /delete"
Link zu diesem Kommentar

Hi MurdocX,

 

das wird so wohl nicht funktionieren:

 

$oldmap = (Get-Itemproperty HKCU:\Network\$unit).RemotePath

 

Kann ich nicht entfernen, da wird ja die Variable gesetzt.

 

Das 'Remove-PSDrive' war eh schon auskommentiert, es wird 'RemoveNetworkDrive' benutzt.

 

Jetzt gibt es aber noch Probleme wenn der User auch lokaler Admin ist. Alles was per GPO oder Logonskript gemappt war, ist nachher nicht gemappt wenn er auch lokaler Admin war. Microsoft hat da wohl in jüngster Vergangenheit was gepatcht um die 'enablelinkedconnection' in der Registry zu verhindern.

Link zu diesem Kommentar

$oldmap = (Get-Itemproperty HKCU:\Network\$unit).RemotePath

Kann ich nicht entfernen, da wird ja die Variable gesetzt.

 

Ersetze einfach $oldmap in der IF-Bedingung durch $Unit, dann kannst du die Zeile wie ich es beschrieben habe, entfernen.

 

 

Microsoft hat da wohl in jüngster Vergangenheit was gepatcht um die 'enablelinkedconnection' in der Registry zu verhindern.

 

"I opened a case on this issue. Microsoft stated a fix would be released in February. They couldn't tell me if it would be in the cumulative or in a separate update."

https://social.technet.microsoft.com/Forums/en-US/62456d84-95a1-4d43-9745-d8c4e8e600fb/since-kb3194798-enablelinkedconnections-is-not-working-anymore-mapping-shares-mmc-on-network?forum=win10itprogeneral

bearbeitet von MurdocX
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...