2012-06-12 51 views
0

使用C#调用PowerShell脚本我最近开始,取得了一些成功:)传递变量从C#的PowerShell:输出文件位置的变量

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

$spWeb.Lists.Add返回一个SharePoint GUID。

问:

我只想在目录/文件名中的GUID将 被写入通过。这怎么可能完成?

我在这里发布了MSDN论坛:http://goo.gl/5p0oz,但由于看似死胡同的线程,我一直在搜索stackoverflow。这篇文章是通过MSDN回复发现的信息的累积收集。

回答

1

您可以尝试使用Set-Content cmdlet来替代,就像这样。你需要通过$ MYFILE为一个字符串,设置内容将完成剩下的你 -

内部脚本即MyScript.ps1在这里,你将有这段代码 -

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 $_) 
} 

如何运行: 打开Powershell的提示和输入此

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

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(); 
+0

感谢您的回复。我不熟悉PowerShell脚本,所以也许你可以告诉我我做错了什么: $ spWeb = Get-SPWeb -Identity http://127.0.0.1 $ listTemplate = [Microsoft.SharePoint.SPListTemplateType] :: DocumentLibrary ([string] $ args,[string] $ myFile) 尝试 %{$ _ $ spWeb.Lists.Add($ args,“”,$ listTemplate)} | $ -F $ } $ spWeb.List.Add部分实际上是返回一个共享点GUID ,我得到的错误消息是:表达式或语句中的意外标记'spWeb'。 –

+0

嗯,事实证明,评论意见不是非常格式友好。 –

+0

您使用Powershell的语法和参数的方式完全错误,我可以看到。 '_MyFunction_在做什么?'它在哪里定义?尝试逐行运行您的代码。您调用DocumentLibrary函数的方式是错误的。对不起,它只是不正确。 **你所问的问题是关于将函数的输出重定向到一个文件,并且你想从C#传递这个文件名。** _But,在这里我没有看到类似的东西吗?_'你能解释一下吗?你试图在这里实现?那么只有我能够帮助你' –