Pasar variables a powershell desde C#: Variables de ubicación del archivo de salida

Recientemente comencé a usar C# para invocar scripts de PowerShell, con cierto éxito :)

$spWeb = Get-SPWeb -Identity http://127.0.0.1 
$listTemplate = [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary 
$spWeb.Lists.Add($args, "", $listTemplate) > $myDirectory

$spWeb.Lists.Add devuelve un GUID de SharePoint.

Pregunta:

Simplemente deseo pasar el directorio/nombre de archivo en el que se escribirá el GUID. ¿Cómo podría hacerse eso?

He publicado en los foros de MSDN aquí: http://goo.gl/5p0oz pero he continuado mi búsqueda en stackoverflow debido a un hilo aparentemente sin salida. Esta publicación es una recopilación acumulativa de la información encontrada a través de las respuestas de MSDN.

preguntado el 12 de junio de 12 a las 15:06

1 Respuestas

Puedes intentar usar el Set-Content cmdlet en cambio, así. Debe pasar $myFile como una cadena y Set-Content hará el resto por usted:

Dentro de su guión, es decir MyScript.ps1 aquí, tendrá este fragmento de código:

param([string]$parameter, [string]$myFile)
try
{
    $spWeb = Get-SPWeb -Identity http://127.0.0.1 
    $listTemplate = [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary 
    $guid = $spWeb.Lists.Add($parameter, "", $listTemplate)
    $guid | Set-Content $myFile
}
catch
{
    throw ("Failed. The error was: '{0}'." -f $_ )
}

Cómo ejecutar: Abra el indicador de Powershell y escriba esto

.\MyScript.ps1 "someparam1" "D:\Output.txt"

Bit de C# -

private PowerShell _ps;
_ps = PowerShell.Create();

var parameter = new List<string>
                                {
                                    parameter,
                                    myFile
                                };

var sr = new StreamReader(@"C:\MyScript.ps1");
_ps.AddScript(sr.ReadToEnd()).AddParameters(parameter);
_ps.Invoke();

Respondido el 13 de junio de 12 a las 09:06

Gracias por su respuesta. No estoy familiarizado con el script de PowerShell, por lo que quizás pueda decirme qué estoy haciendo mal: $spWeb = Get-SPWeb -Identity 127.0.0.1 $listTemplate = [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary param([string]$args, [string]$myFile) try { MyFunction | %{$_ $spWeb.Lists.Add($argumentos, "", $listTemplate)} | Set-Content $myFile } catch {throw ("Error. El error fue: '{0}'." -f $_ ) } la parte $spWeb.List.Add es en realidad lo que devuelve un GUID de sharepoint, el mensaje de error I get es: Token inesperado 'spWeb' en expresión o declaración. - mherr

Bueno, resulta que los comentarios a comentarios no son muy compatibles con el formato. - mherr

Puedo ver que la forma en que está utilizando las sintaxis y los parámetros de Powershell es completamente incorrecta. What is _MyFunction_ doing ? ¿Dónde se define? Intente ejecutar su código línea por línea. La forma en que está llamando a la función DocumentLibrary es incorrecta. Lo siento, simplemente no es correcto. La pregunta que ha hecho es sobre cómo redireccionar la salida de una función a un archivo y desea pasar ese nombre de archivo de C#. Pero, ¿no veo nada de eso aquí? Can you please explain what are you trying to achieve here ? Then only I will be in a position to help you - Angshuman Agarwal

Mis disculpas por un comentario tan incorrecto. Permítame retroceder. $spWeb = Get-SPWeb -Identity http://127.0.0.1 $listTemplate = [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary $spWeb.Lists.Add($args, "", $listTemplate) > $myFile - mherr

Mis disculpas por un comentario tan incorrecto. Permítame retroceder. $spWeb = Get-SPWeb -Identity http://127.0.0.1 $listTemplate = [Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary $spWeb.Lists.Add($args, "", $listTemplate) > $myDirectory $spWeb.Lists.Add devuelve un GUID de SharePoint. Simplemente deseo pasar el directorio/nombre de archivo en el que se escribirá el GUID. En la publicación original, la forma en que paso los parámetros funciona para $args, pero no para $myDirectory. Soy muy nuevo en powershell, así que siéntete libre de no responder si esto es una pérdida de tiempo, pero gracias por tu intento. - mherr

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.