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;
}
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
add a comment |
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
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
add a comment |
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
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
c# powershell
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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.
1
@boxdog: Thanks - I've added a note to that effect to the answer.
– mklement0
Nov 16 '18 at 14:12
add a comment |
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
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
1
@boxdog: Thanks - I've added a note to that effect to the answer.
– mklement0
Nov 16 '18 at 14:12
add a comment |
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.
1
@boxdog: Thanks - I've added a note to that effect to the answer.
– mklement0
Nov 16 '18 at 14:12
add a comment |
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.
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.
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
add a comment |
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
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