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

Geschrieben (bearbeitet)

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
Geschrieben (bearbeitet)

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
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...