Jump to content

Laufwerkswechsel per Powershell


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

Empfohlene Beiträge

Hallo.

 

Ich habe ein Problem mit folgendem Codeausschnitt:

 

function NetzlaufwerkeLoeschen
{
net use * /delete /yes
}

foreach ($element in $Hilfe)
{
[xml] $Quelle = (Get-Content -Path $element)
$RV = $Quelle.RootRateDB.Header.GetAttribute("RateVersion")
$RV = [int]$RV
$RV = $RV.ToString("00")
$RR = $Quelle.RootRateDB.Header.GetAttribute("RateRevision")
$RR = [int]$RR
$RR = $RR.ToString("00")
$CS = $Quelle.RootRateDB.Header.GetAttribute("CountryString")
[color="Red"]net use b: \\w7u-n-0004\test
cd b:[/color]
cd laender
New-Item $parameter1 -ErrorAction SilentlyContinue -ItemType directory
cd $parameter1
New-Item released -ErrorAction SilentlyContinue -ItemType directory
cd released
New-Item $CS -ErrorAction SilentlyContinue -ItemType directory
cd $CS
New-Item "$RV.$RR" -ErrorAction SilentlyContinue -ItemType directory
cd "$RV.$RR"
$Ursprung = "$Pfad\$parameter1-$CS.*"
$Ziel = "b:\laender\$parameter1\released\$CS\$RV.$RR\"
Copy-Item -Path $Ursprung -Destination $Ziel	
Netzlaufwerkeloeschen
}

 

Im Array Hilfe befinden sich 2 Elemente. Beim ersten Durchlauf funktioniert alles super. Beim 2ten mal legt er wieder die Laufwerksverknüpfung an, beim Wechseln in das Laufwerk erhalte ich dann aber folgende Fehlermeldung:

Set-Location : Das Laufwerk wurde nicht gefunden. Ein Laufwerk mit dem Namen "b" ist nicht vorhanden.

Bei C:\Users\theinemann\Desktop\ausliefern-test.ps1:45 Zeichen:4

+ cd <<<< b:

+ CategoryInfo : ObjectNotFound: (b:String) [set-Location], DriveNotFoundException

+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

 

Warum klappt es beim 2ten mal nicht, während der erste Durchlauf problemlos funktioniert?

 

Grüße

Alith

bearbeitet von Alith Anar
Link zu diesem Kommentar

Muss man eventuell noch irgendwelche Variablen löschen?

 

Sobald ich Powershell / Powergui einmal schliesse läuft das Script jedesmal sauber durch.

Starte ich es jedoch zwei mal hintereinander (ohne Powershell bzw die PowerGUI zu schliessen) kommt der Fehler.

 

Anbei mal der komplette Code:

Clear-Host
$parameter1 = $args[0]
New-Item c:\temp -ItemType directory -ErrorAction SilentlyContinue
New-Item c:\temp\logfile-auslieferscript.txt -ItemType file -ErrorAction SilentlyContinue
$Logfile = "c:\temp\logfile-auslieferscript.txt"
$Netzlaufwerke = "c:\temp\netzlaufwerke.txt"
Remove-Item $Netzlaufwerke -ErrorAction SilentlyContinue
function NetzlaufwerkeAnlegen
{
net use $args[0] $args[1]
}
function NetzlaufwerkeLoeschen
{
net use * /delete /yes
}
if (!$parameter1)
     {
     $parameter1 = "phoenix"
     }
elseif ($parameter1 -eq "/?" -or ($parameter1 -eq "help") -or ($parameter1 -eq "hilfe"))
     {
		echo "Hilfe aufgerufen. Script wird beendet."
		break
     }
else
{
Write-Host "Als Parameter wurde $parameter1 übergeben."
}
net use > $Netzlaufwerke
NetzlaufwerkeLoeschen
$Pfad = "c:\Projekte\NewRateTables\Ratetables"
$Hilfe = Get-ChildItem "$Pfad\*" -Include $parameter1-???.xml
net use
net use b: \\10.255.5.11\Test "#sicher01" /USER:w7u-n-0004\localhorst
foreach ($element in $Hilfe)
{
[xml] $Quelle = (Get-Content -Path $element)
$RV = $Quelle.RootRateDB.Header.GetAttribute("RateVersion")
$RV = [int]$RV
$RV = $RV.ToString("00")
$RR = $Quelle.RootRateDB.Header.GetAttribute("RateRevision")
$RR = [int]$RR
$RR = $RR.ToString("00")
$CS = $Quelle.RootRateDB.Header.GetAttribute("CountryString")
b:
cd laender
New-Item $parameter1 -ErrorAction SilentlyContinue -ItemType directory
cd $parameter1
New-Item released -ErrorAction SilentlyContinue -ItemType directory
cd released
New-Item $CS -ErrorAction SilentlyContinue -ItemType directory
cd $CS
New-Item "$RV.$RR" -ErrorAction SilentlyContinue -ItemType directory
cd "$RV.$RR"
$Ursprung = "$Pfad\$parameter1-$CS.*"
$Ziel = "b:\laender\$parameter1\released\$CS\$RV.$RR\"
Copy-Item -Path $Ursprung -Destination $Ziel
cd\
}	
Netzlaufwerkeloeschen
$Datei = Get-Content $Netzlaufwerke
$Datei | Foreach-Object {
$Zeile=$_;
$Zeile = [regex]::Split($Zeile," ")
if ($Zeile[0] -eq "OK")
	{
	NetzlaufwerkeAnlegen $Zeile[11] $Zeile[19]
	}
else
	{
	}
}
Remove-Item $Netzlaufwerke -ErrorAction SilentlyContinue	
c:

 

Es geht mit Sicherheit eleganter, aber für den 2ten Script bin ich schon ganz zufrieden. :)

bearbeitet von Alith Anar
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...