2013-05-31 106 views
4

我想知道是否有一個在線工具,可以將C#代碼轉換爲PowerShell cmdlet代碼。我有下面的代碼,我需要它的PowerShell。我沒有視覺工作室把它變成exe或dll。任何幫助或想法都會很棒。是否有任何工具,可以做PowerShell的C#代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Microsoft.SharePoint; 

namespace CopyUsersBetweenGroupsInSharepointByRR 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("This tool will copy the users from one group to another group"); 
      Console.WriteLine("Please enter the URL of the site where your groups are available"); 
      String siteUrl = Console.ReadLine(); 
      using (SPSite site = new SPSite(siteUrl)) 
      { 
       try 
       { 
        SPWeb web = site.OpenWeb(); 
        Console.WriteLine("Please enter the name of the source group"); 
        String sourceGroupName = Console.ReadLine(); 
        Console.WriteLine("Please enter the name of the destination group"); 
        String destinationGroupName = Console.ReadLine(); 
        SPGroup sourceGroup = web.Groups[sourceGroupName]; 
        SPGroup destinationGroup = web.Groups[destinationGroupName]; 
        SPUserCollection sourceUsers = sourceGroup.Users; 
        SPUserInfo[] sourceUserInfoArray = new SPUserInfo[sourceUsers.Count]; 
        for (int i = 0; i < sourceUsers.Count; i++) 
        { 
         sourceUserInfoArray[i] = new SPUserInfo(); 
         sourceUserInfoArray[i].LoginName = sourceUsers[i].LoginName; 
         sourceUserInfoArray[i].Name = sourceUsers[i].Name; 
        } 
        destinationGroup.Users.AddCollection(sourceUserInfoArray); 
        destinationGroup.Update(); 
        web.Update(); 
        Console.WriteLine("Operation Completed Successfully"); 
        Console.ReadLine(); 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine(e.Message); 
        Console.ReadLine(); 
       } 
      } 
     } 
    } 
} 
+0

只需下載試用版的VS ... –

+0

我不認爲有任何C#-PowerShell編譯器... – Bakuriu

+0

也許Visual Studio Express可以提供幫助嗎? –

回答

6

最快的方法是自己編寫PowerShell代碼。 下面是代碼在PowerShell中的外觀,我想說大多數C#開發人員應該能夠在很短的時間內掌握將C#代碼轉換爲PowerShell的概念。

功能可在一開始有點奇怪,因爲通常的PS語法是

myFunction Parameter1 Parameter2 

而且你真的應該安裝PowerShell 3.0,並使用在Windows PowerShell ISE工具來開發代碼。 無論如何,它不應該花費你1-2個小時才能讓你的C#代碼在PowerShell中運行。

[System.Reflection.Assembly]::LoadWithPartialName(」Microsoft.SharePoint」) 
Write-Host "This tool will copy the users from one group to another group" 
Write-Host "Please enter the URL of the site where your groups are available" 
[string] $siteUrl = [Console]::ReadLine() 

$site = new-object Microsoft.SharePoint.SPSite($siteUrl) 
try 
{ 
    $web = $site.OpenWeb() 
    Write-Host "Please enter the name of the source group" 
    [string] $sourceGroupName = [Console]::ReadLine() 
    Write-Host "Please enter the name of the destination group" 
    [string] $destinationGroupName = [Console]::ReadLine() 
    $sourceUsers = $web.Groups[$sourceGroupName] 

    (and so on) 
} 
catch 
{ 
    Write-Error ("Failed to copy sharepoint users." + $_) 
} 
+0

你也可以創建你自己的新類型。在這裏檢查:http://stackoverflow.com/questions/6848741/can-i-write-a-class-using-powershell –

0

不知道有關的在線工具,但下載免費的Visual Studio Express的&遵循this tutorial應該有你在任何時間創建cmdlet的

1

我懷疑有任何遠程類似,但Visual Studio是不編譯C#代碼所需。你可以編譯一個沒有VS的exe。編譯器(csc.exe)和msbuild作爲框架的一部分。他們位於C:\Windows\Microsoft.NET\Framework\{version}

如果您確實想從PowerShell中調用此功能,請查看Add-Type cmdlet。您提供它的源代碼,它將即時編譯源代碼,然後將程序集加載到您的會話中。

6

這就像上面那些讓人們遠離SO的意見。 OP的問題是明確的,並顯示真正的需要。

有幾種方法可以做到這一點。重寫你的整個C#代碼庫不是其中之一。

正如已經討論過的,從PS 2開始,您可以直接運行C#(或大多數其他語言),也可以引用格式良好的外部文件。我在這方面取得了不同的成績,我不相信這是OP真正的成就。

如果你真的想轉換代碼(特別是編譯後的程序集),那麼像Reflector這樣的反編譯器能夠做到這一點,並且 - 通過PowerShell插件 - 還能夠實時轉換它。

http://blog.lekman.com/2011/10/converting-c-to-powershell.html

如果你希望你的輸入和輸出取PS控制檯內的地方,那麼你仍然必須執行一些明顯的重新寫入。但是這種方法已經證明對我非常有用。

相關問題