2010-06-16 11 views
6

Estoy intentando hacer algo muy simple en PowerShell.Archivo de bloqueo de PowerShell

  1. Lectura del contenido de un archivo
  2. manipulación alguna cadena
  3. Ahorro de la prueba modificada de nuevo al archivo

    function Replace { 
        $file = Get-Content C:\Path\File.cs 
        $file | foreach {$_ -replace "document.getElementById", "$"} |out-file -filepath C:\Path\File.cs 
    } 
    

He tratado Set-Content también.

Siempre obtengo una excepción no autorizada. Puedo ver que el $file tiene el contenido del archivo, se produce un error al escribir el archivo.

¿Cómo puedo solucionar esto?

+0

¿Esto falla para todos los archivos o solo uno o en esa ruta? –

Respuesta

4

Esto es probablemente causado por el cmdlet Get-Content que obtiene un candado para lectura y Out-File que intenta obtener su bloqueo para escritura. pregunta similar está aquí: Powershell: how do you read & write I/O within one pipeline?

Así que la solución sería:

${C:\Path\File.cs} = ${C:\Path\File.cs} | foreach {$_ -replace "document.getElementById", '$'} 
${C:\Path\File.cs} = Get-Content C:\Path\File.cs | foreach {$_ -replace "document.getElementById", '$'} 

$content = Get-Content C:\Path\File.cs | foreach {$_ -replace "document.getElementById", '$'} 
$content | Set-Content C:\Path\File.cs 

Básicamente lo que necesita para amortiguar el contenido del archivo para que el archivo se puede cerrar (Get-Content para la lectura) y después de que el buffer se debe enjuagar al archivo (Set-Content, durante ese bloqueo de escritura será necesario).

+0

Funcionó. Gracias. Ahora me siento estúpido por preguntar esto :) pero gracias. Lo leí acerca de esto, pero como estaba canalizando todo en una declaración, me dio un error ya que no se soltó la cerradura. ¡Genial! – Ben

+0

No entiendo la solución - Tengo un archivo xml a través de '[xml] $ file = Get-Content $ filename' y cuando intento eliminar el archivo después de leerlo, aparece el error de bloqueo. No hay un método de eliminación en 'XmlDocument' y anular' $ file' no funciona, por lo que no estoy seguro de cómo proceder. – PeterX

+0

Quizás la variable debería ser 'xml' '[xml] $ xml = Get-Content $ filename'. Entonces está claro, que no es un archivo, sino un objeto que representa xml. 'Remove-Item $ filename' borra el archivo. – stej

Cuestiones relacionadas