Just split your string into an array or list and then assign them to the textboxes.
using (PowerShell powerShell = PowerShell.Create())
{
powerShell.AddScript("Get-ComputerInfo | Select-Object CsDNSHostName,WindowsProductName, OSVersion, CSDomainRole, CSProcessors, OsProductType");
powerShell.AddCommand("Out-String");
Collection<PSObject> PSOutput = powerShell.Invoke();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject pSObject in PSOutput)
stringBuilder.AppendLine(pSObject.ToString());
var stringarr = stringBuilder.ToString().Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
textBox1.Text = stringarr[0];
textBox2.Text = stringarr[1];
textBox3.Text = stringarr[2];
textBox4.Text = stringarr[3];
textBox5.Text = stringarr[4];
textBox6.Text = stringarr[5];
}
One quite note you might like for future usage.
If you add/change ConvertTo-Json + Newtonsoft.Json to your project you can easily phrase the string output (JSON Formated) to a class.
- Change Out-String to ConvertTo-Json
powerShell.AddCommand("ConvertTo-Json");
Stop in debug once after Clipboard.SetText(stringBuilder.ToString());
Use Visual Studio Menu -> Edit -> Paste Special -> Paste JSON as Classes
Full code to phrase your output to a class.
private void button1_Click(object sender, EventArgs e)
{
using (PowerShell powerShell = PowerShell.Create())
{
powerShell.AddScript("Get-ComputerInfo | Select-Object CsDNSHostName,WindowsProductName, OSVersion, CSDomainRole, CSProcessors, OsProductType");
powerShell.AddCommand("ConvertTo-Json");
Collection<PSObject> PSOutput = powerShell.Invoke();
StringBuilder stringBuilder = new StringBuilder();
foreach (PSObject pSObject in PSOutput)
{
stringBuilder.AppendLine(pSObject.ToString());
}
#if DEBUG
Clipboard.SetText(stringBuilder.ToString());
#endif
Rootobject retval = JsonConvert.DeserializeObject<Rootobject>(stringBuilder.ToString());
textBox1.Text = retval.CsDNSHostName.Trim();
textBox2.Text = retval.WindowsProductName.Trim();
textBox3.Text = retval.OsVersion.Trim();
textBox4.Text = retval.CsDomainRole.ToString();
textBox5.Text = retval.CsProcessors[0].Description.Trim();
textBox6.Text = retval.OsProductType.ToString();
}
}
public class Rootobject
{
public string CsDNSHostName { get; set; }
public string WindowsProductName { get; set; }
public string OsVersion { get; set; }
public int CsDomainRole { get; set; }
public Csprocessor[] CsProcessors { get; set; }
public int OsProductType { get; set; }
}
public class Csprocessor
{
public string Name { get; set; }
public string Manufacturer { get; set; }
public string Description { get; set; }
public int Architecture { get; set; }
public int AddressWidth { get; set; }
public int DataWidth { get; set; }
public int MaxClockSpeed { get; set; }
public int CurrentClockSpeed { get; set; }
public int NumberOfCores { get; set; }
public int NumberOfLogicalProcessors { get; set; }
public object ProcessorID { get; set; }
public object SocketDesignation { get; set; }
public object ProcessorType { get; set; }
public string Role { get; set; }
public string Status { get; set; }
public int CpuStatus { get; set; }
public int Availability { get; set; }
}
I usually use this methode to invoke a script.
public List<object> InvokeScript(string script)
{
List<object> pSDataStreams = new List<object>();
using (PowerShell powerShell = PowerShell.Create())
{
powerShell.Streams.Information.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.Streams.Error.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.Streams.Debug.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.Streams.Progress.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.Streams.Verbose.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.Streams.Warning.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.AddScript(script);
// powerShell.Streams.Information.d
using (var outputCollection = new PSDataCollection<PSObject>())
{
outputCollection.DataAdding += (sender, e) => { pSDataStreams.Add(e.ItemAdded); };
powerShell.Invoke(null, outputCollection);
}
}
return pSDataStreams;
}
Tab2TxtBox2), and assigned it some text (Tab2TxtBox2.Text = stringBuilder.ToString();). In your question it is unclear why you cannot create another textbox (like, i.e.:Textbox3), and assign it some text, like:Textbox3.Text = 'Hello World!';.