Получить исходный код для ссылочных функций в Runbook Azure - PullRequest
0 голосов
/ 13 ноября 2018

Я новичок в PowerShell и автоматизации Azure. В настоящее время у меня есть учетная запись автоматизации Azure, и у нее мало заданий Runbook. Я пытаюсь добавить новую логику в существующее задание Azure Runbook, обновляя его скрипт powershell. Я вижу, что есть некоторые функции, но, к сожалению, мы не сохранили исходный код :(. Поскольку книга запусков в настоящее время работает без проблем, я хочу знать, как получить исходный код ссылочных функций.

Я провел поиск в модулях, галерее модулей, пакетах Python 2 и т. Д. В учетной записи автоматизации, используемой этой книгой запусков, а также в узлах Активы, командлеты и книги запусков (которые отображаются в режиме редактирования сценария на портале). но не смог найти где ссылки на эти функции. Я вижу один модуль, который, как я подозреваю, связан с чем-то, но не уверен.

Как к сведению, функции называются так: GetClassicConnection, GetRunAsConnection, Set-Subscription $ subcriptName

Итак, вот мои вопросы:

  1. Есть ли способ получить исходный код всех ссылочных функций в этом сценарии PowerShell Runbook? Что-то вроде разборки .NET DLL с использованием инструментов дизассемблера.

  2. Как просмотреть исходный код существующего модуля в учетной записи автоматизации, который имеет статус «Доступен» в разделе «Модули».

1 Ответ

0 голосов
/ 13 ноября 2018

У меня пока не было причин использовать Azure Runbook, однако PowerShellCore уже имеет открытый исходный код и может быть просмотрен на GitHub .

При этом вы можете получитьисходный код из локальных командлетов, например, таким образом ...

Param
(
    [string]$CmdletName = (Get-Command -CommandType Cmdlet | 
    Out-GridView -Passthru)
)

# Get the DLL is it is a compiled cmdlet
'Getting DLL if the entered cmdlet name is a compiled cmdlet'
(Get-Command $CmdletName).DLL 

'Getting cmdlet details / source code'
$metadata = New-Object system.management.automation.commandmetadata (Get-Command $CmdletName)
[System.management.automation.proxycommand]::Create($MetaData)

Примечание. Даже с учетом вышеизложенного у меня были проблемы с ошибкой некоторых командлетов.

Вы можете получить исходный код из локальных функций, например, таким образом ...

Param
(
    [string]$FunctionName = (Get-Command -CommandType Function | 
    Out-GridView -Passthru)
)

(Get-Command -Name $FunctionName).ScriptBlock 

Для dll можно использовать тот же подход для просмотра любых других .Net dll,те же инструменты, ILSpy или dotNetPeek и т. п.

...