2014-01-14 3 views
0

Я пишу командлет VB.NET PowerShell, которому необходимо запустить и позже остановить файл Transcript (Start-Transcript). Итак, как мне удастся запустить команду Start-Transcript из командлета? Я попытался это:VB.NET PowerShell Cmdlet Start-Transcript

Dim myRunSpace As Runspace = RunspaceFactory.CreateRunspace() 
myRunSpace.Open() 
Dim MyPipeline As Pipeline = myRunSpace.CreatePipeline() 
MyPipeline.Commands.AddScript("Start-Transcript -Path $pwd\session.txt") 
Dim results As Collection(Of PSObject) = MyPipeline.Invoke() 
myRunSpace.Close() 

Производит ошибку «Start-Transcript: этот хост не поддерживает направление транскрипции». Тем не менее, когда я вхожу в команду вручную , не возникает ошибки и начинается транскрипция.

ответ

0

Метод Start-Transcript является специфичным для хоста и реализуется хостом. Причина этого, я предполагаю, заключается в том, что неясно, какие входные и выходные данные доступны на разных хостах, и поэтому нелегко создать общую реализацию, которая работает во всех случаях.

Консоль PowerShell Console поддерживает функцию Start-Transcript (которую вы видите, поскольку она работает, когда вы ее вызываете), но другие хосты должны реализовать ее до того, как она будет использоваться на этом хосте. Если, например, попытаться написать Start-Transcript в хосте PowerShell ISE вы получите сообщение об ошибке, как следующее:

Start-Transcript : This host does not support transcription. 
At line:1 char:1 
+ Start-Transcript 
+ ~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotImplemented: (:) [Start-Transcript], PSNotSupportedExce 
    ption 
    + FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands.StartTranscript 
    Command 

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

+0

На самом деле все, что я пытаюсь сделать, это определить, переписывает ли он, поскольку мне нужно отредактировать файл транскрипта, который заблокирован в таком случае, и я могу обнаружить это, если Start-Transcript выдает ошибку. Кроме того, по-видимому, малоизвестная переменная $ transcript редко работает. – Archdeacon

+0

Тогда ваш вопрос является дубликатом http://stackoverflow.com/questions/10170237/powershell-how-to-check-if-transcript-is-running –

+0

Возможно, нет, так как вы действительно хотите отредактировать файл. Я не знаю, как проверить, записана ли запись в настоящее время или нет. Я не знаю, что такое $ transcript, переменная, которую вы настраиваете сами? Насколько я вижу, переменные переменных не изменяются, вызывая Start-Transcript (do 'ls variable:' до и после проверки) в консоли PowerShell. Я предполагаю, что такая переменная будет существовать, это также будет специфичным для узла. –

0

Это ограничение командлета. MSFT сделал так, что Start-Transcript работает только при вызове с консоли powershell.exe, он даже не работает с их ISE. Обходным путем было использование add-content/out-file/tee-object для создания собственного файла журнала.

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

http://www.powertheshell.com/transcript/

+0

Могу ли я перефразировать мой вопрос - возможно ли определить, расшифровывается ли сеанс или нет? Как я уже отмечал выше, переменная $ transcript должна указывать путь к файлу транскрипта, но редко работает, иначе я мог бы получить значение этого. – Archdeacon

0

Я следовал один из ваших ранних ссылок и исправлен этот VB.NET код из PowerShell сценария там:

Dim thisType As Object = MyBase.Host.GetType().GetProperty("ExternalHost",Reflection.BindingFlags.NonPublic Or BindingFlags.Instance).GetValue(MyBase.Host, New Object() {}) 
Dim abc As Object = thisType.GetType().GetProperty("IsTranscribing", Reflection.BindingFlags.NonPublic Or BindingFlags.Instance).GetValue(thisType, New Object() {}) 
WriteObject(abc.ToString) 

Это возвращает правильно Истинную или Ложных. Так что я могу сделать больше, чем здесь, например, Стоп-транскрипт? Извинения за комментарий выше, но эта ссылка медленная, и текст стал искаженным.

Смежные вопросы