der-suchende
Goto Top

Netzwerkressource ohne Laufwerksbuchstabe via Batch bzw. Scrip erstellen

Hallo,

ich habe in einem größeren Netzwerk mit Windows 2008 (R2) Server das Problem dass mir bei einigen Nutzern die Laufwerksbuchstaben ausgehen da die Geschäftsleitung thematische Netzlaufwerke wünscht.

Bisher habe ich via net use die Laufwerke vergeben. Das reicht nun nicht mehr aus da ich keine Buchstaben mehr frei habe.

Es gibt ja die Möglichkeit eine Netzwerkressource als Verknüpfung einzubinden so das sie auch im Explorer und in den Programmen z.B. zum Speicher von Daten auswählbar ist. Im Explorer erledigt man das mit wenigen Klicks, unter Windows 7 z.B. mittels Rechtsklick und Netzwerkadresse hinzufügen.

Ich weiß das sowas auch automatisiert geht weil unter anderem der Server 2012 (R2) Essentials solch einen Netzwerkordner als Verknüpfung anlegt. Leider weiß ich nicht WIE man das via batch oder script erledigt. Meine längere Suche im Web half hier auch nicht.

Hat jemand sowas schon mal via batch erledigt? Welchen befehl nutzt man? Ich möchte es lieber als script und nicht via GPO, was wohl auch geht, erledigen. Auch weil es sich z.T. um einen Terminalserver handelt und ich wirklich nur userbasiert arbeiten will.

Ziel ist scriptgesteuert einen oder mehrere Netzwerkpfade im Explorer unter einem Namen ohne Verwendung eines Buchstabens zur Verfügung zu stellen und diese ggf. auch wieder zu entfernen.

Vielen Dank für eure Tips!

Content-ID: 303498

Url: https://administrator.de/contentid/303498

Ausgedruckt am: 21.11.2024 um 22:11 Uhr

beidermachtvongreyscull
beidermachtvongreyscull 03.05.2016 aktualisiert um 08:27:00 Uhr
Goto Top
Probiere mal folgendes:

mklink /d "C:\Users\%username%\AppData\Roaming\Microsoft\Windows\Network Shortcuts" "\\server\freigabe"  

Ich würde es dennoch per GPO machen. Das läuft sauberer.
Winary
Winary 03.05.2016 aktualisiert um 09:05:36 Uhr
Goto Top
Hallo,

was spricht gegen DFS? Damit kann man mehrere Netzwerkressourcen zu einer oder wenigen zusammenfassen. Ich persönlich finde das ziemlich fordernd von den Nutzern wenn sie für unterschiedliche Dinge unterschiedliche Netzlaufwerke/Laufwerksbuchstaben nutzen müssten

Grüße Winary
der-suchende
der-suchende 03.05.2016 aktualisiert um 09:14:05 Uhr
Goto Top
Danke für den Tip mit mklink. Probiere ich aus. Wo gibt man dabei den Namen der Verknüpfung ein?

Ich muß gestehen ich bin mit GPOs noch nicht so ganz Freund. Muß mich da weiter einarbeiten. Hab da auch keine Möglichkeit gefunden ohne Verwendung eines Laufwerkbuchstabens.

Bei DFS stehe ich auf dem Schlauch. ist doch ein Dateisystem, oder?
Winary
Winary 03.05.2016 aktualisiert um 09:13:34 Uhr
Goto Top
Hier ist das Anlegen von Verknüpfungen via Group Policy Preferences ganz gut beschrieben:

https://www.windowspro.de/wolfgang-sommergut/desktop-symbole-anlegen-loe ...

Aber ob man jetzt viele Laufwerke im Arbeitsplatz hat oder zig Verknüpfungen auf dem Desktop, ordentlicher und intuitiver wird es dadurch nicht. Zumal es ja auch Anwendungen gibt, die intern keine UNC-Pfade unterstützen sondern nur Laufwerksbuchstaben.
Winary
Winary 03.05.2016 um 09:12:13 Uhr
Goto Top
Ja, aber man kann damit Freigaben verschiedener Maschinen zusammenfassen.
beidermachtvongreyscull
beidermachtvongreyscull 03.05.2016 um 09:13:03 Uhr
Goto Top
Zitat von @der-suchende:

Danke für den Tip. probiere ich aus. Ich muß gestehen ich bin mit GPOs noch nicht so ganz Freund. Muß mich da weiter einarbeiten.
Das halte ich für richtig und gut. Mit GPOs fast Du größere Flexibilität auch hinsichtlich der Benennung der Verlinkung. Das geht mit mklink nämlich nicht.

In einer GPO schaust Du unter:
Benutzerkonfiguration -> Einstellungen -> Windows-Einstellungen -> Laufwerkszuordnungen

Dort kannst Du Netzlaufwerke erstellen oder eben diese Ordnerverlinkungen.

Der Vorschlag von @Winary ist auch nicht schlecht, Du musst aber aufpassen, wie Du ihn umsetzt, denn sonst kann es sein, dass der DFS-Namespace nicht verfügbar ist, wenn der DC mit der PDC-Rolle down ist.
http://serverfault.com/questions/674051/dfs-namespace-inaccessible-when ...
der-suchende
der-suchende 03.05.2016 aktualisiert um 09:23:44 Uhr
Goto Top
Kann ich via GPO jedem User problemlos unterschiedliche Laufwerke zuweisen? Wie definiere ich das für einen bestimmten User vom Server aus? Hier bekommt nämlich jeder Nutzer eine andere Kombination an Freigaben.

Sorry für meine Unwissenheit. net use war schön einfach face-wink
Winary
Winary 03.05.2016 aktualisiert um 09:28:43 Uhr
Goto Top
Zielgruppenadressierung auf Elementebene

Das kann man für alles, was du in einer GPP anlegst einrichten. Wenn du eine Verknüpfung anlegst hast du das unter dem Reiter "Gemeinsame Optionen". Du kannst also die eine Verknüpfung nur auf Nutzer1/Computer1/etc. und die andere auf Nutzer2/Computer2/etc. anlegen lassen und das in einer einzigen GPO.

http://blog.pmd-media.com/2009/08/18/desktop-verknupfungen-via-gruppenr ...
Nicht das OS auswählen sondern Benutzer oder Sicherheitsgruppe.
muftypeter
muftypeter 03.05.2016 aktualisiert um 09:46:56 Uhr
Goto Top
Hallo,
DFS war spontan auch mein erster Gedanke.

Grüße Peter
der-suchende
der-suchende 03.05.2016 aktualisiert um 10:08:15 Uhr
Goto Top
Das klingt ja alles schon mal sehr gut. Vielen dank! Hab es eben mal getestet nur wurde mir automatisch ein Laufwerksbuchstabe vergeben. Da habe ich wohl etwas falsch gemacht.

Aber was?

Wie gesagt: Ich möchte die Verlinkung ohne Laufwerksbuchstabe und systemweit nutzbar im Explorer und damit in den Programmen.

Zu DFS muß ich mich erstmal einlesen.

EDIT: Ich werde mal ein wenig probieren und mich ggf nochmal melden. Falls einer eine schöne Anleitung für mein Problem findet oder sowas doch via Script machbar ist wäre ich sehr erfreut.
Winary
Winary 03.05.2016 um 11:12:43 Uhr
Goto Top
In den GPP hast du auch wirklich eine Verknüpfung erstellt?
Der Speicherort war auch der Desktop o.Ä. (Arbeitsplatz geht nicht!)? z.b. C:\Users\%username%\Desktop
Und dein Zielpfad war auch \\Server\Freigabe ?

Ich wüsste nicht inwieweit die von mir verlinkte Anleitung verbesserungswürdig wäre, außer das mit dem Betriebssystem.

Poste doch mal ein Bild mit der Verknüpfung aus den GPP, die du angelegt hast.
der-suchende
der-suchende 11.05.2016 um 08:39:52 Uhr
Goto Top
Man kann aber irgendwie die Verknüpfung auch im Explorer erstellen, nicht auf dem Desktop. Desktop nutzt mir nix.
Ich guck mal wie das der Server 2012 R2 Essentials macht, der erstellt nämlich so eine verknüpfung im Explorer.
129148
129148 11.05.2016 aktualisiert um 08:50:17 Uhr
Goto Top
Eine andere Möglichkeit ist Verzeichnisverknüpfungen (Symlinks) zu nutzen:

Diese Verknüpfungen kannst du in Windows selber erstellen
mklink /d C:\Share1 \\Server\ShareXYZ
usw.

Ich stimme aber mit den Kollegen absolut überein, DFS mit ABE wäre absolut die einzig richtige Entscheidung bei so einem Szenario.
Thomas1100101
Thomas1100101 18.08.2019 um 12:54:20 Uhr
Goto Top
Hallo der-suchende,

Netzwerkadressen lassen sich wie folgt scriptbasiert hinzufügen.

Du hast bereits richtig beschrieben, wie man sie über die GUI erzeugen kann. Leider gibt es keine Tools oder fertige cmdlets für die PowerShell, die das übernehmen können. Daher stellt sich zunächst die Frage, was diese Netzwerkadressen überhaupt sind. Zu finden sind sie unter "%APPDATA%\Microsoft\Windows\Network Shortcuts". Dort sehen sie wie Verknüpfungen aus, sind es aber keine! Windows beschreibt sie als "Ordnerverknüpfungen" (engl. FileFolder). Tatsächlich sind das schreibgeschützte Ordner, die man sich per cmd oder PowerShell anschauen kann. Sie enthalten immer zwei Dateien: eine desktop.ini (versteckte Systemdatei), die immer den gleichen Inhalt hat und eine target.lnk, die die eigentliche Verknüpfung darstellt.

Damit ist auch klar, wie diese "Ordnerverknüpfungen"/"FileFolder"/"Netzwerkadressen" manuell erzeugt werden können. Es muss zunächst ein Ordner erstellt werden, der so heißt, wie die Netzwerkadresse schließlich heißen soll. Der Ordner muss schreibgeschützt sein. Darin muss die Verknüpfung target.lnk erzeugt werden und die Datei desktop.ini abgelegt werden, die für alle Netzwerkadressen gleich ist.

In der PowerShell kannst du dies mit den folgenden beiden Funktionen realisieren:
function New-Shortcut {

    param (
        $TargetUri,
        $ShortcutFilePath
    )

    if (($ShortcutFilePath -inotlike "[I].lnk") -and ($ShortcutFilePath -inotlike "[/I].url")) {  
        Write-Error "ShortcutFilePath does not have a '.lnk' or '.url' ending!"  
        return
    }

    $WScriptShell = New-Object -ComObject WScript.Shell
    $Shortcut = $WScriptShell.CreateShortcut($ShortcutFilePath)
    $Shortcut.TargetPath = $TargetUri
    $Shortcut.Description = $TargetUri
    $Shortcut.Save()

}

function New-FileFolder {
    
    param (
        $TargetFolder,
        $FileFolderPath
    )

    if (Test-Path -Path $FileFolderPath) {
        Write-Error "$FileFolderPath does already exist and will not be modified to prevent data loss."  
        return
    }

    # Create file folder
    $FileFolder = New-Item -ItemType Directory -Path $FileFolderPath
    $fileFolder.Attributes = "ReadOnly"  

    # Create desktop.ini
    $DesktopIni = New-Item -ItemType File -Path $(Join-Path -Path $FileFolderPath -ChildPath "desktop.ini")  
    "[.ShellClassInfo]" | Out-File -FilePath $DesktopIni -Append -Encoding ascii  
    "CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}" | Out-File -FilePath $DesktopIni -Append -Encoding ascii  
    "Flags=2" | Out-File -FilePath $DesktopIni -Append -Encoding ascii  
    $DesktopIni.Attributes = "Hidden, System"  

    # Create target.lnk
    New-Shortcut -TargetUri $TargetFolder -ShortcutFilePath $(Join-Path -Path $FileFolderPath -ChildPath "target.lnk")  
}
Die erste Funktion ist eine Hilfsfunktion und dient zum Erstellen einer einfachen Verknüpfung. Die zweite Funktion dient zum Erstellen eines FileFolders und damit zum Beispiel zum Erstellen einer Netzwerkadresse. Wenn du die beiden Funktionen in ein Powershell Skript integrierst, kannst du nachher mit einem einzigen Aufruf eine Netzwerkadresse erstellen:
New-FileFolder -TargetFolder "\\eine\netzwerk\freigabe" -FileFolderPath "$env:APPDATA\Microsoft\Windows\Network Shortcuts\EineFreigabeImNetzwerk"  

Beste Grüße,
Thomas1100101
roeggi
roeggi 23.10.2020 um 09:39:03 Uhr
Goto Top
Zitat von @Thomas1100101:

Hallo der-suchende,

Netzwerkadressen lassen sich wie folgt scriptbasiert hinzufügen.

Du hast bereits richtig beschrieben, wie man sie über die GUI erzeugen kann. Leider gibt es keine Tools oder fertige cmdlets für die PowerShell, die das übernehmen können. Daher stellt sich zunächst die Frage, was diese Netzwerkadressen überhaupt sind. Zu finden sind sie unter "%APPDATA%\Microsoft\Windows\Network Shortcuts". Dort sehen sie wie Verknüpfungen aus, sind es aber keine! Windows beschreibt sie als "Ordnerverknüpfungen" (engl. FileFolder). Tatsächlich sind das schreibgeschützte Ordner, die man sich per cmd oder PowerShell anschauen kann. Sie enthalten immer zwei Dateien: eine desktop.ini (versteckte Systemdatei), die immer den gleichen Inhalt hat und eine target.lnk, die die eigentliche Verknüpfung darstellt.

Damit ist auch klar, wie diese "Ordnerverknüpfungen"/"FileFolder"/"Netzwerkadressen" manuell erzeugt werden können. Es muss zunächst ein Ordner erstellt werden, der so heißt, wie die Netzwerkadresse schließlich heißen soll. Der Ordner muss schreibgeschützt sein. Darin muss die Verknüpfung target.lnk erzeugt werden und die Datei desktop.ini abgelegt werden, die für alle Netzwerkadressen gleich ist.

In der PowerShell kannst du dies mit den folgenden beiden Funktionen realisieren:
function New-Shortcut {
> 
>     param (
>         $TargetUri,
>         $ShortcutFilePath
>     )
> 
>     if (($ShortcutFilePath -inotlike "[I].lnk") -and ($ShortcutFilePath -inotlike "[/I].url")) {  
>         Write-Error "ShortcutFilePath does not have a '.lnk' or '.url' ending!"  
>         return
>     }
> 
>     $WScriptShell = New-Object -ComObject WScript.Shell
>     $Shortcut = $WScriptShell.CreateShortcut($ShortcutFilePath)
>     $Shortcut.TargetPath = $TargetUri
>     $Shortcut.Description = $TargetUri
>     $Shortcut.Save()
> 
> }
> 
> function New-FileFolder {
>     
>     param (
>         $TargetFolder,
>         $FileFolderPath
>     )
> 
>     if (Test-Path -Path $FileFolderPath) {
>         Write-Error "$FileFolderPath does already exist and will not be modified to prevent data loss."  
>         return
>     }
> 
>     # Create file folder
>     $FileFolder = New-Item -ItemType Directory -Path $FileFolderPath
>     $fileFolder.Attributes = "ReadOnly"  
> 
>     # Create desktop.ini
>     $DesktopIni = New-Item -ItemType File -Path $(Join-Path -Path $FileFolderPath -ChildPath "desktop.ini")  
>     "[.ShellClassInfo]" | Out-File -FilePath $DesktopIni -Append -Encoding ascii  
>     "CLSID2={0AFACED1-E828-11D1-9187-B532F1E9575D}" | Out-File -FilePath $DesktopIni -Append -Encoding ascii  
>     "Flags=2" | Out-File -FilePath $DesktopIni -Append -Encoding ascii  
>     $DesktopIni.Attributes = "Hidden, System"  
> 
>     # Create target.lnk
>     New-Shortcut -TargetUri $TargetFolder -ShortcutFilePath $(Join-Path -Path $FileFolderPath -ChildPath "target.lnk")  
> }
Die erste Funktion ist eine Hilfsfunktion und dient zum Erstellen einer einfachen Verknüpfung. Die zweite Funktion dient zum Erstellen eines FileFolders und damit zum Beispiel zum Erstellen einer Netzwerkadresse. Wenn du die beiden Funktionen in ein Powershell Skript integrierst, kannst du nachher mit einem einzigen Aufruf eine Netzwerkadresse erstellen:
New-FileFolder -TargetFolder "\\eine\netzwerk\freigabe" -FileFolderPath "$env:APPDATA\Microsoft\Windows\Network Shortcuts\EineFreigabeImNetzwerk"  

Beste Grüße,
Thomas1100101


Ich möchte auch gerne Netzwerkadressen erstellen. Habe es mit deinem Script versucht. Die Verknüpfung wird auch erstellt. Aber leider ist der Ordner leer und verweist nicht auf den Ordner auf dem Server.

Muss ich im ersten Script auch etwas anpassen?
ManuManu2021
ManuManu2021 09.04.2022 aktualisiert um 13:01:50 Uhr
Goto Top
Hallo,

vermute diese Frage passt in diesen Thread nicht so gut rein?
Kurzgesagt: kann es sein, dass "Network Shortcuts" "leichter-windows-stottern-freezes-verursachen"
als "net use ip adresse" ? (bzw. eine Desktopverknüpfung zu \\win7-pc\ziel-ordner

Das Problem ist, dass ca. 10 Network Shortcuts zu Win7/XP PCs (in der Produktionsabteilung) vorhanden sind.
Das zweite Problem ist, das die zwei CAD-PCs Windows 10 haben und häufig im Windows-Datei-Explorer freezen, wenn man zwischen den "Network Shortcuts" hin+her" wechselt (weil kleinere "Produktionsauftragsdateien" hin+her" kopiert werden.

%APPDATA%\Microsoft\Windows\Network Shortcuts