Pasar variables a powershell desde C#: Variables de ubicación del archivo de salida
Frecuentes
Visto 1,392 veces
0
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.
1 Respuestas
1
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas c# powershell or haz tu propia pregunta.
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 AgarwalMis 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
- mherrMis 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