Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
После создания пространства выполнения можно добавить команды и скрипты Windows PowerShell в конвейер, а затем вызвать конвейер синхронно или асинхронно.
Создание конвейера
Класс System.Management.Automation.PowerShell предоставляет несколько методов добавления команд, параметров и скриптов в конвейер. Вы можете вызвать конвейер синхронно, вызвав перегрузку метода System.Management.Automation.PowerShell.Invoke* или асинхронно вызвав перегрузку метода System.Management.Automation.PowerShell.BeginInvoke*, а затем метода System.Management.Automation.PowerShell.EndInvoke*.
AddCommand
Создайте объект System.Management.Automation.PowerShell.
PowerShell ps = PowerShell.Create();Добавьте команду, которую вы хотите выполнить.
ps.AddCommand("Get-Process");Вызовите команду.
ps.Invoke();
При вызове метода System.Management.Automation.PowerShell.AddCommand* несколько раз перед вызовом метода System.Management.Automation.PowerShell.Invoke* результат первой команды будет передан второй и т. д. Если вы не хотите передать результат предыдущей команды в команду, добавьте ее, вызвав вместо этого System.Management.Automation.PowerShell.AddStatement*.
AddParameter
В предыдущем примере выполняется одна команда без каких-либо параметров. Вы можете добавить параметры в команду с помощью метода System.Management.Automation.PSCommand.AddParameter*, например, следующий код получает список всех процессов, которые называются powershell на компьютере.
PowerShell.Create().AddCommand("Get-Process")
.AddParameter("Name", "powershell")
.Invoke();
Дополнительные параметры можно добавить, вызвав System.Management.Automation.PSCommand.AddParameter*.
PowerShell.Create().AddCommand("Get-Command")
.AddParameter("Name", "Get-VM")
.AddParameter("Module", "Hyper-V")
.Invoke();
Вы также можете добавить словарь имен параметров и значений, вызвав метод System.Management.Automation.PowerShell.AddParameters*.
IDictionary parameters = new Dictionary<String, String>();
parameters.Add("Name", "Get-VM");
parameters.Add("Module", "Hyper-V");
PowerShell.Create().AddCommand("Get-Command")
.AddParameters(parameters)
.Invoke()
AddStatement
Вы можете имитировать пакетную обработку с помощью метода System.Management.Automation.PowerShell.AddStatement*, который добавляет дополнительную инструкцию в конец конвейера. Следующий код получает список выполняемых процессов с именем powershell, а затем получает список запущенных служб.
PowerShell ps = PowerShell.Create();
ps.AddCommand("Get-Process").AddParameter("Name", "powershell");
ps.AddStatement().AddCommand("Get-Service");
ps.Invoke();
AddScript
Вы можете запустить существующий скрипт, вызвав метод System.Management.Automation.PowerShell.AddScript*. В следующем примере скрипт добавляется в конвейер и выполняется его. В этом примере предполагается, что в папке с именем D:\PSScriptsуже есть скрипт с именем MyScript.ps1.
PowerShell ps = PowerShell.Create();
ps.AddScript(File.ReadAllText(@"D:\PSScripts\MyScript.ps1")).Invoke();
Существует также версия метода System.Management.Automation.PowerShell.AddScript*, который принимает логический параметр с именем useLocalScope. Если для этого параметра задано значение true, скрипт выполняется в локальной области. Следующий код запустит скрипт в локальной области.
PowerShell ps = PowerShell.Create();
ps.AddScript(File.ReadAllText(@"D:\PSScripts\MyScript.ps1"), true).Invoke();
Вызов конвейера синхронно
После добавления элементов в конвейер вызывается. Для синхронного вызова конвейера вызывается перегрузка метода System.Management.Automation.PowerShell.Invoke*. В следующем примере показано, как синхронно вызывать конвейер.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
namespace HostPS1e
{
class HostPS1e
{
static void Main(string[] args)
{
// Using the PowerShell.Create and AddCommand
// methods, create a command pipeline.
PowerShell ps = PowerShell.Create().AddCommand ("Sort-Object");
// Using the PowerShell.Invoke method, run the command
// pipeline using the supplied input.
foreach (PSObject result in ps.Invoke(new int[] { 3, 1, 6, 2, 5, 4 }))
{
Console.WriteLine("{0}", result);
} // End foreach.
} // End Main.
} // End HostPS1e.
}
Асинхронное вызов конвейера
Конвейер вызывается асинхронно путем вызова перегрузки объекта System.Management.Automation.PowerShell.BeginInvoke* для создания объекта IAsyncResult, а затем вызова метода System.Management.Automation.PowerShell.EndInvoke*.
В следующем примере показано, как асинхронно вызывать конвейер.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management.Automation;
namespace HostPS3
{
class HostPS3
{
static void Main(string[] args)
{
// Use the PowerShell.Create and PowerShell.AddCommand
// methods to create a command pipeline that includes
// Get-Process cmdlet. Do not include spaces immediately
// before or after the cmdlet name as that will cause
// the command to fail.
PowerShell ps = PowerShell.Create().AddCommand("Get-Process");
// Create an IAsyncResult object and call the
// BeginInvoke method to start running the
// command pipeline asynchronously.
IAsyncResult asyncpl = ps.BeginInvoke();
// Using the PowerShell.Invoke method, run the command
// pipeline using the default runspace.
foreach (PSObject result in ps.EndInvoke(asyncpl))
{
Console.WriteLine("{0,-20}{1}",
result.Members["ProcessName"].Value,
result.Members["Id"].Value);
} // End foreach.
System.Console.WriteLine("Hit any key to exit.");
System.Console.ReadKey();
} // End Main.
} // End HostPS3.
}
См. также
создание InitialSessionState
PowerShell