2012-06-12 53 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,在這裏我沒有看到類似的東西嗎?_'你能解釋一下嗎?你試圖在這裏實現?那麼只有我能夠幫助你' –