Это продолжение этого вопроса здесь, у меня есть Команда PowerShell, которую я создал и могу вызвать команду в окне PowerShell, но при попытке вызова из метода C # я получаю сообщение об ошибке, поскольку командлет не распознается, я пробовал использовать другие существующие команды и получил ту же ошибку, поэтому Я подозреваю, что возникла проблема с импортом модуля, хотя я не получаю эту ошибку в потоках. Ошибка. Единственная ошибка, которую я получаю, это Get-RowAndPartitionKey не распознанный cmndlt, проверьте правописание ...
Хотел бы знать, есть ли другой способ, я должен попробовать или могу ли я отладить больше здесь, чтобы увидеть, извлекает ли мой модуль все команды или нет. прямо сейчас я не знаю, как это исправить.
public string RunScript( string contentScript, Dictionary<string, EntityProperty> parameters )
{
List<string> parameterList = new List<string>();
foreach( var item in parameters )
{
parameterList.Add( item.Value.ToString() );
}
using( PowerShell ps = PowerShell.Create() )
{
IAsyncResult async =
ps.AddCommand( "Import-Module" ).AddArgument( @"C:\Users\...\.D.PowerShell.dll" )
.AddStatement()
.AddCommand( "Get-RowAndPartitionKey" ).AddParameter( "Properties", "test" )
.BeginInvoke();
StringBuilder stringBuilder = new StringBuilder();
foreach( PSObject result in ps.EndInvoke( async ) )
{
stringBuilder.AppendLine( result.ToString() );
}
return stringBuilder.ToString();
}
}
}
Нижеприведенный метод не возвращает никаких ошибок в Streams.Error или Verbose, но также не выводит:
public async Task<IEnumerable<object>> RunScript( string scriptContents, List<string> scriptParameters )
{
// create a new hosted PowerShell instance using the default runspace.
// wrap in a using statement to ensure resources are cleaned up.
using( PowerShell ps = PowerShell.Create() )
{
// specify the script code to run.
ps.AddScript( scriptContents );
// specify the parameters to pass into the script.
ps.AddParameter( "Properties" ,"test") ;
// execute the script and await the result.
var pipelineObjects = await ps.InvokeAsync().ConfigureAwait( false );
return pipelineObjects;
}
}
scriptContent
"\"$path = 'C:\\Users...\\.TabularData.PowerShell.dll'\\r\\nImport-Module $path\\r\\nGet-RowAndPartitionKeys\""
Get-RowAndPartitionKey
(обратите внимание, что вы использовали форму единственного числа - безs
в конце - в первом фрагменте, поэтому я использую это и здесь, вместе с дословной строкой, поэтому вам не нужно экранировать"
символов.), вы должны передать ее@args
:ps.AddScript(@"Import-Module ""C:\Users...\.TabularData.PowerShell.dll""; Get-RowAndPartitionKey @args")
- person mklement0   schedule 22.02.2021