Wenn Sie ein .NET-Objekt von PowerShell verwenden und einen Dateinamen verwenden, scheint es immer relativ zu C:\Windows\System32
zu sein.
Zum Beispiel:
%Vor% ... schreibt C:\Windows\System32\hello.txt
anstatt C:\Current\Directory\hello.txt
Warum macht PowerShell das? Kann dieses Verhalten geändert werden? Wenn es nicht geändert werden kann, wie kann ich es umgehen?
Ich habe versucht, Resolve-Path
, aber das funktioniert nur mit Dateien, die bereits vorhanden sind, und es ist viel zu ausführlich, um die ganze Zeit zu tun.
Die Gründe, warum PowerShell die .NET-Vorstellung des aktuellen Arbeitsverzeichnisses nicht mit PowerShells Konzept des Arbeitsverzeichnisses synchronisiert, sind:
Sie können das .net-Arbeitsverzeichnis in das Powershell-Arbeitsverzeichnis ändern:
[Environment]::CurrentDirectory = (Get-Location -PSProvider FileSystem).ProviderPath
Nach dieser Zeile funktionieren alle .net Methoden wie [io.path]::GetFullPath
und [IO.File]::WriteAllText
ohne Probleme
Das liegt wahrscheinlich daran, dass PowerShell in System32 ausgeführt wird. Wenn Sie in ein Verzeichnis in PowerShell wechseln, wird das Arbeitsverzeichnis von powershell.exe nicht geändert.
Siehe:
PowerTip-Artikel zum Synchronisieren der beiden Verzeichnisse
Ich habe vor langer Zeit dasselbe Problem kennengelernt und jetzt füge ich folgendes an den Anfang meines Profils:
%Vor%Tags und Links powershell