将变量从C#传递到powershell:输出文件位置变量

将变量从C#传递到powershell:输出文件位置变量,c#,powershell,C#,Powershell,我最近开始使用C#调用powershell脚本,并取得了一些成功:) $spWeb.Lists.Add返回SharePoint GUID 问题: 我只想传入GUID将在其中显示的目录/文件名 写下来。这怎么可能呢 我已经在这里的MSDN论坛上发表了文章:但是由于一个看似死胡同的线程,我继续在stackoverflow上搜索。这篇文章是通过MSDN回复找到的信息的累积收集 您可以尝试改用Set-Content cmdlet,如下所示。您需要将$myFile作为字符串传递,而Set Content

我最近开始使用C#调用powershell脚本,并取得了一些成功:)


$spWeb.Lists.Add
返回SharePoint GUID

问题:

我只想传入GUID将在其中显示的目录/文件名 写下来。这怎么可能呢


我已经在这里的MSDN论坛上发表了文章:但是由于一个看似死胡同的线程,我继续在stackoverflow上搜索。这篇文章是通过MSDN回复找到的信息的累积收集

您可以尝试改用
Set-Content cmdlet
,如下所示。您需要将$myFile作为字符串传递,而Set Content将为您完成其余的工作-

在您的脚本(即这里的
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();
private PowerShell\u ps;
_ps=PowerShell.Create();
var参数=新列表
{
参数
我的文件
};
var sr=newstreamreader(@“C:\MyScript.ps1”);
_ps.AddScript(sr.ReadToEnd()).AddParameters(parameter);
_ps.Invoke();

感谢您的回复。我不熟悉powershell脚本,所以也许您可以告诉我我做错了什么:$spWeb=Get-spWeb-Identity$listTemplate=[Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary参数([string]$args,[string]$myFile)尝试{MyFunction |%{$$spWeb.Lists.Add($args,“,$listTemplate)}设置内容$myFile}捕获{throw(失败。错误为:“{0}”。-f$\u}$spWeb.List.Add部分实际上是返回sharepoint GUID的部分,我得到的错误消息是:表达式或语句中出现意外的标记“spWeb”。事实证明,对注释的注释格式不太友好。我可以看出,您使用Powershell的语法和参数的方式是完全错误的。
我的函数\u在做什么?
它是在哪里定义的?请尝试逐行运行代码。您调用DocumentLibrary函数的方式是错误的。抱歉,这不正确。您所问的问题是关于将函数的输出重定向到文件,并且希望从C#传递该文件名。但是,我在这里没有看到类似的情况?
可以吗请您解释一下您在这里想要实现什么?那么只有我才能帮助您
我对这样一个错误的评论表示歉意。请允许我支持。
$spWeb=Get spWeb-Identityhttp://127.0.0.1 $listTemplate=[Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary$spWeb.Lists.Add($args,“,$listTemplate)>$myFile
对于这样一个错误的评论,我深表歉意。请允许我备份。
$spWeb=Get-spWeb-Identityhttp://127.0.0.1 $listTemplate=[Microsoft.SharePoint.SPListTemplateType]::DocumentLibrary$spWeb.Lists.Add($args,“,$listTemplate)>$myDirectory
$spWeb.Lists.Add返回一个SharePoint GUID。我只想传入将写入GUID的目录/文件名。在最初的文章中,我传入参数的方式适用于$args,但不适用于$myDirectory。我对powershell非常陌生,因此如果这是浪费时间,请不要回复,但谢谢你的努力。
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();