How to make System.Management.Automation.PowerShell output same as run thru command line





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















Is there any way to get powershell output in c# same way as it is when running command manually via powershell cmd?
I.e. for example:



PS C:temp> gci


Directory: C:temp


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 19.10.2018 9:57 SomeDir
-a--- 13.11.2018 17:03 3306 Somelog.log


And c# code:



PowerShell ps = PowerShell.Create();
ps.AddCommand("gci");
ICollection<PSObject> results = ps.Invoke();
foreach (PSObject invoke in results)
{
Console.WriteLine(invoke.ToString());
}


gives me:



SomeDir
Somelog.log









share|improve this question


















  • 1





    The console is taking care of the formatting for you in PowerShell, but you are responsible for it in your own C# code.

    – boxdog
    Nov 16 '18 at 13:18




















1















Is there any way to get powershell output in c# same way as it is when running command manually via powershell cmd?
I.e. for example:



PS C:temp> gci


Directory: C:temp


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 19.10.2018 9:57 SomeDir
-a--- 13.11.2018 17:03 3306 Somelog.log


And c# code:



PowerShell ps = PowerShell.Create();
ps.AddCommand("gci");
ICollection<PSObject> results = ps.Invoke();
foreach (PSObject invoke in results)
{
Console.WriteLine(invoke.ToString());
}


gives me:



SomeDir
Somelog.log









share|improve this question


















  • 1





    The console is taking care of the formatting for you in PowerShell, but you are responsible for it in your own C# code.

    – boxdog
    Nov 16 '18 at 13:18
















1












1








1


1






Is there any way to get powershell output in c# same way as it is when running command manually via powershell cmd?
I.e. for example:



PS C:temp> gci


Directory: C:temp


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 19.10.2018 9:57 SomeDir
-a--- 13.11.2018 17:03 3306 Somelog.log


And c# code:



PowerShell ps = PowerShell.Create();
ps.AddCommand("gci");
ICollection<PSObject> results = ps.Invoke();
foreach (PSObject invoke in results)
{
Console.WriteLine(invoke.ToString());
}


gives me:



SomeDir
Somelog.log









share|improve this question














Is there any way to get powershell output in c# same way as it is when running command manually via powershell cmd?
I.e. for example:



PS C:temp> gci


Directory: C:temp


Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 19.10.2018 9:57 SomeDir
-a--- 13.11.2018 17:03 3306 Somelog.log


And c# code:



PowerShell ps = PowerShell.Create();
ps.AddCommand("gci");
ICollection<PSObject> results = ps.Invoke();
foreach (PSObject invoke in results)
{
Console.WriteLine(invoke.ToString());
}


gives me:



SomeDir
Somelog.log






c# powershell






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 16 '18 at 13:10









KsiceKsice

1,49353155




1,49353155








  • 1





    The console is taking care of the formatting for you in PowerShell, but you are responsible for it in your own C# code.

    – boxdog
    Nov 16 '18 at 13:18
















  • 1





    The console is taking care of the formatting for you in PowerShell, but you are responsible for it in your own C# code.

    – boxdog
    Nov 16 '18 at 13:18










1




1





The console is taking care of the formatting for you in PowerShell, but you are responsible for it in your own C# code.

– boxdog
Nov 16 '18 at 13:18







The console is taking care of the formatting for you in PowerShell, but you are responsible for it in your own C# code.

– boxdog
Nov 16 '18 at 13:18














1 Answer
1






active

oldest

votes


















3














Append a (final) pipeline segment that calls Out-String, which produces the same representation that you would see in the console, as a single, multi-line string:



  using (var ps = PowerShell.Create())
{
ps.AddScript("gci | Out-String");
foreach (PSObject o in ps.Invoke())
{
Console.WriteLine(o.ToString());
}
}


Out-String uses a default output-line width, which you can override with the -Width parameter.

To receive the output as a collection of lines instead of as a single, multi-line string, use -Stream.



If you want more control over the output formatting, you can precede the Out-String call with another pipeline segment that calls one of the Format-* cmdlets, such as Format-Table.



Caveat:



As boxdog points out, this approach is only suitable for obtaining for-display output, because the resulting string is not meant to be used for programmatic processing (you've lost the original objects' type information, and the specific output format is not guaranteed to have long-term stability).



Of course, you first can store the original output objects in an intermediate step in order to preserve them for later programmatic processing.






share|improve this answer





















  • 1





    @boxdog: Thanks - I've added a note to that effect to the answer.

    – mklement0
    Nov 16 '18 at 14:12












Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53338595%2fhow-to-make-system-management-automation-powershell-output-same-as-run-thru-comm%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









3














Append a (final) pipeline segment that calls Out-String, which produces the same representation that you would see in the console, as a single, multi-line string:



  using (var ps = PowerShell.Create())
{
ps.AddScript("gci | Out-String");
foreach (PSObject o in ps.Invoke())
{
Console.WriteLine(o.ToString());
}
}


Out-String uses a default output-line width, which you can override with the -Width parameter.

To receive the output as a collection of lines instead of as a single, multi-line string, use -Stream.



If you want more control over the output formatting, you can precede the Out-String call with another pipeline segment that calls one of the Format-* cmdlets, such as Format-Table.



Caveat:



As boxdog points out, this approach is only suitable for obtaining for-display output, because the resulting string is not meant to be used for programmatic processing (you've lost the original objects' type information, and the specific output format is not guaranteed to have long-term stability).



Of course, you first can store the original output objects in an intermediate step in order to preserve them for later programmatic processing.






share|improve this answer





















  • 1





    @boxdog: Thanks - I've added a note to that effect to the answer.

    – mklement0
    Nov 16 '18 at 14:12
















3














Append a (final) pipeline segment that calls Out-String, which produces the same representation that you would see in the console, as a single, multi-line string:



  using (var ps = PowerShell.Create())
{
ps.AddScript("gci | Out-String");
foreach (PSObject o in ps.Invoke())
{
Console.WriteLine(o.ToString());
}
}


Out-String uses a default output-line width, which you can override with the -Width parameter.

To receive the output as a collection of lines instead of as a single, multi-line string, use -Stream.



If you want more control over the output formatting, you can precede the Out-String call with another pipeline segment that calls one of the Format-* cmdlets, such as Format-Table.



Caveat:



As boxdog points out, this approach is only suitable for obtaining for-display output, because the resulting string is not meant to be used for programmatic processing (you've lost the original objects' type information, and the specific output format is not guaranteed to have long-term stability).



Of course, you first can store the original output objects in an intermediate step in order to preserve them for later programmatic processing.






share|improve this answer





















  • 1





    @boxdog: Thanks - I've added a note to that effect to the answer.

    – mklement0
    Nov 16 '18 at 14:12














3












3








3







Append a (final) pipeline segment that calls Out-String, which produces the same representation that you would see in the console, as a single, multi-line string:



  using (var ps = PowerShell.Create())
{
ps.AddScript("gci | Out-String");
foreach (PSObject o in ps.Invoke())
{
Console.WriteLine(o.ToString());
}
}


Out-String uses a default output-line width, which you can override with the -Width parameter.

To receive the output as a collection of lines instead of as a single, multi-line string, use -Stream.



If you want more control over the output formatting, you can precede the Out-String call with another pipeline segment that calls one of the Format-* cmdlets, such as Format-Table.



Caveat:



As boxdog points out, this approach is only suitable for obtaining for-display output, because the resulting string is not meant to be used for programmatic processing (you've lost the original objects' type information, and the specific output format is not guaranteed to have long-term stability).



Of course, you first can store the original output objects in an intermediate step in order to preserve them for later programmatic processing.






share|improve this answer















Append a (final) pipeline segment that calls Out-String, which produces the same representation that you would see in the console, as a single, multi-line string:



  using (var ps = PowerShell.Create())
{
ps.AddScript("gci | Out-String");
foreach (PSObject o in ps.Invoke())
{
Console.WriteLine(o.ToString());
}
}


Out-String uses a default output-line width, which you can override with the -Width parameter.

To receive the output as a collection of lines instead of as a single, multi-line string, use -Stream.



If you want more control over the output formatting, you can precede the Out-String call with another pipeline segment that calls one of the Format-* cmdlets, such as Format-Table.



Caveat:



As boxdog points out, this approach is only suitable for obtaining for-display output, because the resulting string is not meant to be used for programmatic processing (you've lost the original objects' type information, and the specific output format is not guaranteed to have long-term stability).



Of course, you first can store the original output objects in an intermediate step in order to preserve them for later programmatic processing.







share|improve this answer














share|improve this answer



share|improve this answer








edited Nov 16 '18 at 14:12

























answered Nov 16 '18 at 13:23









mklement0mklement0

139k22256293




139k22256293








  • 1





    @boxdog: Thanks - I've added a note to that effect to the answer.

    – mklement0
    Nov 16 '18 at 14:12














  • 1





    @boxdog: Thanks - I've added a note to that effect to the answer.

    – mklement0
    Nov 16 '18 at 14:12








1




1





@boxdog: Thanks - I've added a note to that effect to the answer.

– mklement0
Nov 16 '18 at 14:12





@boxdog: Thanks - I've added a note to that effect to the answer.

– mklement0
Nov 16 '18 at 14:12




















draft saved

draft discarded




















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53338595%2fhow-to-make-system-management-automation-powershell-output-same-as-run-thru-comm%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

The Sandy Post

Danny Elfman

Pages that link to "Head v. Amoskeag Manufacturing Co."