Есть ли какой-нибудь инструмент, который может сделать код С# для powershell?

Мне было интересно, есть ли онлайн-инструмент, который может конвертировать код С# в код командлета powershell. У меня есть следующий код, который мне нужен для powershell. У меня нет визуальной студии, чтобы превратить это в exe или dll. любая помощь или идеи были бы замечательными.

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();
                }
            }
        }
    }
}

person torres    schedule 31.05.2013    source источник
comment
Просто скачайте пробную версию VS...   -  person Danny Beckett    schedule 31.05.2013
comment
Я не думаю, что существует какой-либо компилятор С# в PowerShell...   -  person Bakuriu    schedule 31.05.2013
comment
Может быть, Visual Studio Express может помочь?   -  person Simon Halsey    schedule 31.05.2013
comment
Мне было интересно, что является основанием для отрицательного отзыва на мой пост. Я просто хотел знать, есть ли альтернативный способ конвертировать С# в powershell. у нас СИЛЬНЫЙ дефицит времени из-за внезапного слияния. Извините, если перепутал пост.   -  person torres    schedule 31.05.2013
comment
кажется, инструмент называется @Sharken :)   -  person CB.    schedule 01.06.2013
comment
@torres Я не голосовал против, но, поскольку вы спросили, я подумал, что вам может быть полезен ответ. Как правило, перевод моих сообщений о типе кода не считается хорошим вопросом сообществом SO. Они часто проявляют мало усилий со стороны спрашивающего, слишком локализованы, и другим трудно учиться у них. Я подозреваю, что ваша формулировка «Есть ли инструмент для этого перевода» была воспринята как поверхностная попытка превратить перевод моего кода в вопрос.   -  person Mike Zboray    schedule 03.06.2013
comment
Почему так много минусов? С этим вопросом все в порядке.   -  person vinczemarton    schedule 02.10.2013
comment
Слишком много заблудших душ на SO, пытающихся собрать все свои значки и характеристики...   -  person Mrchief    schedule 07.01.2015
comment
возможный дубликат Методы преобразования кода C# в сценарий PowerShell ?   -  person John    schedule 24.03.2015


Ответы (4)


Самый быстрый способ сделать это — написать код 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." + $_)
}
person Sharken    schedule 31.05.2013
comment
вы также можете создать свой собственный новый тип. проверьте здесь: stackoverflow.com/ вопросы/6848741/ - person Bruno Bieri; 24.09.2014

Это комментарии, подобные приведенным выше, которые массово отталкивают людей от SO. Вопрос ОП был недвусмысленным и отражал настоящую необходимость.

Есть несколько способов добиться этого. Переписывание всего репозитория кода C# не входит в их число.

Как уже говорилось, начиная с PS 2 вы можете либо запускать C# (или почти любой другой язык) в строке, либо обращаться к правильно сформированному внешнему файлу. У меня был смешанный успех с этим, и я не верю, что это то, к чему действительно стремился ОП.

Если вы действительно хотите преобразовать код (особенно скомпилированные сборки), то декомпилятор, такой как Reflector, может это сделать, а с надстройкой PowerShell также может преобразовать его на лету.

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

Если вы хотите, чтобы ваш ввод и вывод происходил в консоли PS, вам все равно придется выполнить некоторые очевидные перезаписи. Но этот метод оказался невероятно полезным для меня.

person Panoone    schedule 24.07.2014

Я сомневаюсь, что есть что-то отдаленно подобное, однако Visual Studio не требуется для компиляции кода С#. Вы можете скомпилировать exe без VS. Компилятор (csc.exe) и msbuild входят в состав фреймворка. Они расположены в C:\Windows\Microsoft.NET\Framework\{version}.

Если вы действительно хотите вызывать это из powershell, взгляните на командлет Add-Type. Вы предоставляете ему исходный код, и он скомпилирует исходный код на лету, а затем загрузит сборку в ваш сеанс.

person Mike Zboray    schedule 31.05.2013

Не уверен насчет онлайн-инструментов, но загрузите бесплатную версию Visual Studio Express и следуйте инструкциям это руководство поможет вам быстро создать командлет

person Simon Halsey    schedule 31.05.2013
comment
Ссылка не работает. - person IFink; 30.11.2020
comment
Я не думаю, что вы даже можете получить Visual Studio Express. Но тогда этому посту почти 8 лет - person Simon Halsey; 16.12.2020