burbank6747 0 Geschrieben 20. Januar 2017 Melden Teilen Geschrieben 20. Januar 2017 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 DankP. S.: Für die Netzwerkdrucker hatte ich eine Lösung gefunden. Zitieren Link zu diesem Kommentar
NorbertFe 2.034 Geschrieben 20. Januar 2017 Melden Teilen Geschrieben 20. Januar 2017 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 Zitieren Link zu diesem Kommentar
burbank6747 0 Geschrieben 20. Januar 2017 Autor Melden Teilen Geschrieben 20. Januar 2017 Sehr viele Leute da eine große Firma. Es soll alles remote und möglichst automatisch passieren ohne daß man zu jedem einzelnen hin muß. Die Laufwerke wurden wohl manuell gemappt. Spielt im nachinein nicht die Rolle wie, sondern daß der Switch auf den neuen Server möglichst reibungslos funktioniert Zitieren Link zu diesem Kommentar
Esta 114 Geschrieben 20. Januar 2017 Melden Teilen Geschrieben 20. Januar 2017 Wenn die User sich die LW selbst gemappt haben, wird es schwierig. Wie wäre es mit einem Alias. So dass nach dem Abschalten des alten Servers die noch alten vorhandenen Mappings auf den neuen Server umgeleitet werden. Wenn es sich um Verlinkung auf dem User Desktop handelt, dafür hatte ich mal ein kleines VB Script gebastelt. Zitieren Link zu diesem Kommentar
Sunny61 806 Geschrieben 20. Januar 2017 Melden Teilen Geschrieben 20. Januar 2017 Was spricht dagegen den Server nach dem Umzug der Daten wieder umzubenennen? Und für die Zukunft wäre ja ein SPN und/oder DFS eine Variante. Zitieren Link zu diesem Kommentar
testperson 1.677 Geschrieben 20. Januar 2017 Melden Teilen Geschrieben 20. Januar 2017 Hi, per GPP ein Netzlaufwerk mit der Option "Alle löschen ab: A" und nur einmalig anwenden und dann dadrunter die neuen Netzlaufwerke. Gruß Jan Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 20. Januar 2017 Melden Teilen Geschrieben 20. Januar 2017 (bearbeitet) 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 etwaGet-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 20. Januar 2017 von NilsK Zitieren Link zu diesem Kommentar
burbank6747 0 Geschrieben 22. Januar 2017 Autor Melden Teilen Geschrieben 22. Januar 2017 Hallo, wenn man nicht ganz so fit im Skripting mit PowerShell ist, kann es schon schwierig sein. Vor allem wenn es heißt "muß per Skript gemacht werden" NilsK, ich denke dein Ansatz hört sich gut an. Werde versuchen den umzusetzen und evtl. bei Rückfragen auf dich zurück kommen, wenn ich denn darf. Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 22. Januar 2017 Melden Teilen Geschrieben 22. Januar 2017 Moin, klar darfst du. Detailfragen beantworten wir gern. Fertige Skripte liefern wir i.d.R. nicht, aber du scheinst da ja auch auf einem guten Weg zu sein. Gruß, Nils Zitieren Link zu diesem Kommentar
burbank6747 0 Geschrieben 23. Januar 2017 Autor Melden Teilen Geschrieben 23. Januar 2017 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 Zitieren Link zu diesem Kommentar
NilsK 2.934 Geschrieben 23. Januar 2017 Melden Teilen Geschrieben 23. Januar 2017 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 Zitieren Link zu diesem Kommentar
burbank6747 0 Geschrieben 25. Januar 2017 Autor Melden Teilen Geschrieben 25. Januar 2017 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 Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 25. Januar 2017 Melden Teilen Geschrieben 25. Januar 2017 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" Zitieren Link zu diesem Kommentar
burbank6747 0 Geschrieben 25. Januar 2017 Autor Melden Teilen Geschrieben 25. Januar 2017 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. Zitieren Link zu diesem Kommentar
MurdocX 949 Geschrieben 25. Januar 2017 Melden Teilen Geschrieben 25. Januar 2017 (bearbeitet) $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 25. Januar 2017 von MurdocX Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.