2010-05-05 11 views

Respuesta

7

Ahh esto a menudo hace que la gente se despierte en PowerShell. Aunque PowerShell tiene la noción de un directorio actual, no es lo mismo que el directorio actual para el proceso. La razón es que un proceso de Windows solo puede tener un directorio actual, mientras que un proceso de PowerShell puede tener múltiples espacios de ejecución/tuberías, cada uno con su propio directorio actual y el directorio actual de PowerShell puede que ni siquiera sea una ubicación de archivo.

. Los métodos .NET que toman rutas relativas se resolverán en el directorio actual del proceso. Por lo tanto, para estar seguro, cuando llame a métodos .NET, debe usar rutas totalmente resueltas. Se podría hacer:

PS> (New-Object IO.FileInfo "$PWD\test.txt").FullName 

$ PWD se expande dentro de la cadena (debido a las dobles comillas) y su una variable automática que siempre devuelve el directorio de trabajo actual. De hecho, devuelve un objeto PathInfo porque la cadena que incrusta puede no ser siempre la ruta física absoluta. Si usa PSDrives (por ejemplo, tengo una unidad temp: \ asignada a mi directorio temporal), tendrá que ser más explícito.

PS> (New-Object IO.FileInfo "$($PWD.ProviderPath)\test.txt").FullName 

Un PowerShell guru puede tener una sintaxis más concisa. Lo anterior es ciertamente bastante feo.

Cuestiones relacionadas