Какую проблему MS решал путем создания PowerShell? [закрытый]

Вот ваш макрос, но для установки точек останова на 1000+ функций требуется некоторое время ... и это замедлит Visual Studio!

Sub BreakAtEveryFunction()
    For Each project In DTE.Solution.Projects
        SetBreakpointOnEveryFunction(project)
    Next project
End Sub


' Macro editor
Sub SetBreakpointOnEveryFunction(ByVal project As Project)
    Dim cm = project.CodeModel

    ' Look for all the namespaces and classes in the 
    ' project.
    Dim list As List(Of CodeFunction)
    list = New List(Of CodeFunction)
    Dim ce As CodeElement
    For Each ce In cm.CodeElements
        If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
            ' Determine whether that namespace or class 
            ' contains other classes.
            GetClass(ce, list)
        End If
    Next

    For Each cf As CodeFunction In list

        DTE.Debugger.Breakpoints.Add(cf.FullName)
    Next

End Sub

Sub GetClass(ByVal ct As CodeElement, ByRef list As List(Of CodeFunction))

    ' Determine whether there are nested namespaces or classes that 
    ' might contain other classes.
    Dim aspace As CodeNamespace
    Dim ce As CodeElement
    Dim cn As CodeNamespace
    Dim cc As CodeClass
    Dim elements As CodeElements
    If (TypeOf ct Is CodeNamespace) Then
        cn = CType(ct, CodeNamespace)
        elements = cn.Members
    Else
        cc = CType(ct, CodeClass)
        elements = cc.Members
    End If
    Try
        For Each ce In elements
            If (TypeOf ce Is CodeNamespace) Or (TypeOf ce Is CodeClass) Then
                GetClass(ce, list)
            End If
            If (TypeOf ce Is CodeFunction) Then
                list.Add(ce)
            End If
        Next
    Catch
    End Try
End Sub
33
задан Peter Mortensen 25 April 2010 в 12:36
поделиться

3 ответа

PowerShell был фактически построен как несколько вещей: зрелая и расширяемая платформа автоматизации и современная административная оболочка.

Первая в основном используется для графических интерфейсов администрирования для Exchange и других серверных продуктов последнее время. Графический интерфейс пользователя - это просто оболочка вокруг PowerShell, которая выполняет тяжелую работу (вроде как программы с графическим интерфейсом пользователя UNIX становятся оболочкой для программы командной строки).

Джеффри Сновер (изобретатель PowerShell) немного уточняет о том, как создавался PowerShell, какие цели и задачи он должен решать.

На мой взгляд, PowerShell как оболочка явно предназначен для замены cmd (легко увидеть) и Windows Script Host (Windows Script Host не привлекал особого внимания в последние годы, хотя он имел те же концепции, что и .NET. в свое время [одна платформа, несколько языков с ActiveScripting], но с .NET Microsoft в основном положила это на покой, и воскрешение, вероятно, не было для них вариантом).

Он объединяет большинство аспектов администрирования Windows в общих концепциях и методы, которые вам нужно изучить только один раз. Кроме того, мощь PowerShell для меня во многом проистекает из того, что он передает объекты, которые могут объяснить, почему у вас возникают проблемы, когда вы выходите из мира .NET / PowerShell, где вы получаете только String [] из команда. Но для многих вещей вы бы назвали внешнюю программу в cmd,

36
ответ дан 27 November 2019 в 18:30
поделиться

Как разработчик, я могу вам сказать, что у меня больше нет кучи проектов ConsoleApplication42, лежащих в папке.

Как разработчик в небольшой компании, где я в основном занимаюсь ИТ (администратор баз данных, управление маршрутизаторами, извлечение подробных записей о звонках с коммутатора, мониторинг и графическая пропускная способность для клиентов и т. Д.), Я могу сказать вам, что PowerShell заполняет Крайне необходимый пробел в Windows и тот факт, что он построен на .NET, обеспечивает беспрепятственный путь обновления, когда конвейер PowerShell слишком медленный для обработки миллионов итераций или требуется более постоянная, строго типизированная реализация.

В любом случае, я думаю, вопрос в том, почему вы переходите на PowerShell, если у вас нет острой необходимости? Я имею в виду, что сейчас это хорошо, так как это ' в основном новый интерфейс управления для всех вещей Microsoft. Но если это не повлияет на вас, не беспокойтесь, если вы не думаете, что получаете что-либо.

EDIT (в ответ на комментарии ниже)

Похоже, вы пытаетесь использовать. NET Process для запуска исполняемого файла и перенаправления его стандартного вывода, чтобы его мог прочитать вызывающий. Я согласен, что это проблема .NET, но, к счастью, PowerShell делает все это за вас довольно просто. Что касается захвата результата и записи его на дисплей, это тоже довольно просто, хотя эта команда не очень известна, потому что она не так часто используется. Вот пример:

# I always find it easier to use aliases for external commands
Set-Alias csc C:\Windows\Microsoft.NET\Framework64\v3.5\csc.exe

# Create some source file
Set-Content test.cs @"
class Program {
    static void Main() {
        System.Console.WriteLine("Hello World");
    }
}
"@

# Call CSC.EXE
# the output of csc.exe is written to results.txt and piped
# to the host (or select-string if you prefer)
csc test.cs | Tee-Object -file results.txt

# Check for errors
if ($LASTEXITCODE) { 
    # this is where community extensions would come in
    # handy. powershell 2.0 also has a command to send
    # mail but in 1.0 you can grab one from poshcode.org
}
10
ответ дан 27 November 2019 в 18:30
поделиться

ИМХО, основным преимуществом является разумное вырезание и вставка в командной консоли.

В противном случае я использую ActiveState ActivePerl для написания сценариев в Windows. Он намного мощнее любого сценария оболочки Windows, а интерфейс OLE предоставляет доступ ко всему Windows API простым в использовании способом.

1
ответ дан 27 November 2019 в 18:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: