//
// Copyright (c) 2006 Microsoft Corporation. All rights reserved.
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
using namespace System;
using namespace System::Collections;
using namespace System::Management::Automation;
using namespace System::Management::Automation::Runspaces;
///
/// This sample uses the RunspaceInvoke class to execute
/// a script that retrieves process information for the
/// list of process names passed into the script.
/// It shows how to pass input objects to a script and
/// how to retrieve error objects as well as the output objects.
///
///
/// This sample demonstrates the following:
/// 1. Creating an instance of the RunspaceInvoke class.
/// 2. Using this instance to execute a string as a PowerShell script.
/// 3. Passing input objects to the script from the calling program.
/// 4. Using PSObject to extract and display properties from the objects
/// returned by this command.
/// 5. Retrieving and displaying error records that were generated
/// during the execution of that script.
///
int
__cdecl main()
{
// Define a list of processes to look for
array^ processNames = gcnew array(4) {
"lsass",
"nosuchprocess",
"services",
"nosuchprocess2"
};
// The script to run to get these processes. Input passed
// to the script will be available in the $input variable.
String^ script = "$input | get-process -name {$_}";
// Create an instance of the RunspaceInvoke class.
RunspaceInvoke^ invoker = gcnew RunspaceInvoke();
Console::WriteLine("Process HandleCount");
Console::WriteLine("--------------------------------");
// Now invoke the runspace and display the objects that are
// returned...
IList^ errors = nullptr;
for each (PSObject^ result in invoker->Invoke(script, processNames, errors))
{
Console::WriteLine("{0,-20} {1}",
result->Members["ProcessName"]->Value,
result->Members["HandleCount"]->Value);
}
// Now process any error records that were generated while running the script.
Console::WriteLine("\nThe following non-terminating errors occurred:\n");
if ((errors != nullptr) && (errors->Count > 0))
{
for each (PSObject^ err in errors)
{
Console::WriteLine(" error: {0}", err->ToString());
}
}
Console::WriteLine("\nHit any key to exit...");
Console::ReadKey();
}