Tracing where output is coming from in a Powershell script
Is it possible to trace where output (to the console) is coming from in a Powershell script? I've got a script which is outputting information to me but I'm not sure which line is making the output. Is it possible to, for example, use Set-PSBreakpoint and tell it to break when info is returned to the console?
Cheers
I'm getting hundreds of "False"s returning on their own lines.
Here's the part of the code where the output is coming from:
$ar = Function-which_returns_array_of_objects
$gr = Function-which_returns_array_of_objects
Write-Host "To begin with..."
Write-Host "$($ar.count) assets"
Write-Host "$($gr.count) goods"
foreach($asset in $ar){
if(!(Test-NoNA -string $asset.Serial)){continue}
#See if the particular serial number exists in Goods Received
$found = @()
$gr | Where {$_.SerialNumber -eq $asset.serial} | %{
$found += $_
# and then mark the entry as one that has to be deleted from GR
$_.Delete = "YES"
}
if($found.count -eq 1){
#Serial Number has been found once in GR
#We want to check its PN...
if(Test-NoNA -string $found.PartNumber -and $found.PartNumber -ne $asset.Model){
#add it to the asset if its good and not the same as the model number...
$asset.PartNumber -eq $found.PartNumber
}
}elseif(!$found -or $found.count -eq 0){
#No entries found in GR
#Shouldn't be the case but doesn't actually do any damage as we'd be deleting the GR entry anyway
}elseif($found.count -gt 1){
#More than one match for the SN - probably means a SN like "N/A" has got through the earlier checks
Write-Warning "More than one match for SN: '$($asset.serial)'"
}else{
#Default catcher
Write-Warning "Unknown Error for SN: '$($asset.serial)'"
}
}
Also, heres Test-NoNA:
function Test-NoNA($string){
#check that the given string is not blank, N/A, ?, etc. Returns true if string is good
if($string -and $string -ne "" -and $string -ne "N/A" -and $string -ne "NA" -and $string -ne '?' -and $string -isnot [System.DBNull]){return $true}
}
powershell debugging scripting output powershell-v3.0
add a comment |
Is it possible to trace where output (to the console) is coming from in a Powershell script? I've got a script which is outputting information to me but I'm not sure which line is making the output. Is it possible to, for example, use Set-PSBreakpoint and tell it to break when info is returned to the console?
Cheers
I'm getting hundreds of "False"s returning on their own lines.
Here's the part of the code where the output is coming from:
$ar = Function-which_returns_array_of_objects
$gr = Function-which_returns_array_of_objects
Write-Host "To begin with..."
Write-Host "$($ar.count) assets"
Write-Host "$($gr.count) goods"
foreach($asset in $ar){
if(!(Test-NoNA -string $asset.Serial)){continue}
#See if the particular serial number exists in Goods Received
$found = @()
$gr | Where {$_.SerialNumber -eq $asset.serial} | %{
$found += $_
# and then mark the entry as one that has to be deleted from GR
$_.Delete = "YES"
}
if($found.count -eq 1){
#Serial Number has been found once in GR
#We want to check its PN...
if(Test-NoNA -string $found.PartNumber -and $found.PartNumber -ne $asset.Model){
#add it to the asset if its good and not the same as the model number...
$asset.PartNumber -eq $found.PartNumber
}
}elseif(!$found -or $found.count -eq 0){
#No entries found in GR
#Shouldn't be the case but doesn't actually do any damage as we'd be deleting the GR entry anyway
}elseif($found.count -gt 1){
#More than one match for the SN - probably means a SN like "N/A" has got through the earlier checks
Write-Warning "More than one match for SN: '$($asset.serial)'"
}else{
#Default catcher
Write-Warning "Unknown Error for SN: '$($asset.serial)'"
}
}
Also, heres Test-NoNA:
function Test-NoNA($string){
#check that the given string is not blank, N/A, ?, etc. Returns true if string is good
if($string -and $string -ne "" -and $string -ne "N/A" -and $string -ne "NA" -and $string -ne '?' -and $string -isnot [System.DBNull]){return $true}
}
powershell debugging scripting output powershell-v3.0
please post the output so we can make a wild guess as to what line of your still-secret code is triggering the stuff. of course, you could try posting some code ... [grin] i understand that it may not be possible to post the whole script - but if you can, please do so. perhaps to Gist.GitHub?
– Lee_Dailey
Nov 22 '18 at 5:08
1
this line$asset.PartNumber -eq $found.PartNumber
looks like it is part of the problem. your comment makes it seem that you intended the-eq
to be=
. [grin]
– Lee_Dailey
Nov 22 '18 at 6:32
Ahhh that's it! That explains some other issues with the script as well.
– Will Maclean
Nov 22 '18 at 21:39
kool! glad to know you got it fixed ... [grin]
– Lee_Dailey
Nov 23 '18 at 16:48
add a comment |
Is it possible to trace where output (to the console) is coming from in a Powershell script? I've got a script which is outputting information to me but I'm not sure which line is making the output. Is it possible to, for example, use Set-PSBreakpoint and tell it to break when info is returned to the console?
Cheers
I'm getting hundreds of "False"s returning on their own lines.
Here's the part of the code where the output is coming from:
$ar = Function-which_returns_array_of_objects
$gr = Function-which_returns_array_of_objects
Write-Host "To begin with..."
Write-Host "$($ar.count) assets"
Write-Host "$($gr.count) goods"
foreach($asset in $ar){
if(!(Test-NoNA -string $asset.Serial)){continue}
#See if the particular serial number exists in Goods Received
$found = @()
$gr | Where {$_.SerialNumber -eq $asset.serial} | %{
$found += $_
# and then mark the entry as one that has to be deleted from GR
$_.Delete = "YES"
}
if($found.count -eq 1){
#Serial Number has been found once in GR
#We want to check its PN...
if(Test-NoNA -string $found.PartNumber -and $found.PartNumber -ne $asset.Model){
#add it to the asset if its good and not the same as the model number...
$asset.PartNumber -eq $found.PartNumber
}
}elseif(!$found -or $found.count -eq 0){
#No entries found in GR
#Shouldn't be the case but doesn't actually do any damage as we'd be deleting the GR entry anyway
}elseif($found.count -gt 1){
#More than one match for the SN - probably means a SN like "N/A" has got through the earlier checks
Write-Warning "More than one match for SN: '$($asset.serial)'"
}else{
#Default catcher
Write-Warning "Unknown Error for SN: '$($asset.serial)'"
}
}
Also, heres Test-NoNA:
function Test-NoNA($string){
#check that the given string is not blank, N/A, ?, etc. Returns true if string is good
if($string -and $string -ne "" -and $string -ne "N/A" -and $string -ne "NA" -and $string -ne '?' -and $string -isnot [System.DBNull]){return $true}
}
powershell debugging scripting output powershell-v3.0
Is it possible to trace where output (to the console) is coming from in a Powershell script? I've got a script which is outputting information to me but I'm not sure which line is making the output. Is it possible to, for example, use Set-PSBreakpoint and tell it to break when info is returned to the console?
Cheers
I'm getting hundreds of "False"s returning on their own lines.
Here's the part of the code where the output is coming from:
$ar = Function-which_returns_array_of_objects
$gr = Function-which_returns_array_of_objects
Write-Host "To begin with..."
Write-Host "$($ar.count) assets"
Write-Host "$($gr.count) goods"
foreach($asset in $ar){
if(!(Test-NoNA -string $asset.Serial)){continue}
#See if the particular serial number exists in Goods Received
$found = @()
$gr | Where {$_.SerialNumber -eq $asset.serial} | %{
$found += $_
# and then mark the entry as one that has to be deleted from GR
$_.Delete = "YES"
}
if($found.count -eq 1){
#Serial Number has been found once in GR
#We want to check its PN...
if(Test-NoNA -string $found.PartNumber -and $found.PartNumber -ne $asset.Model){
#add it to the asset if its good and not the same as the model number...
$asset.PartNumber -eq $found.PartNumber
}
}elseif(!$found -or $found.count -eq 0){
#No entries found in GR
#Shouldn't be the case but doesn't actually do any damage as we'd be deleting the GR entry anyway
}elseif($found.count -gt 1){
#More than one match for the SN - probably means a SN like "N/A" has got through the earlier checks
Write-Warning "More than one match for SN: '$($asset.serial)'"
}else{
#Default catcher
Write-Warning "Unknown Error for SN: '$($asset.serial)'"
}
}
Also, heres Test-NoNA:
function Test-NoNA($string){
#check that the given string is not blank, N/A, ?, etc. Returns true if string is good
if($string -and $string -ne "" -and $string -ne "N/A" -and $string -ne "NA" -and $string -ne '?' -and $string -isnot [System.DBNull]){return $true}
}
powershell debugging scripting output powershell-v3.0
powershell debugging scripting output powershell-v3.0
edited Nov 23 '18 at 20:35
mklement0
128k20241270
128k20241270
asked Nov 22 '18 at 4:04
Will MacleanWill Maclean
83
83
please post the output so we can make a wild guess as to what line of your still-secret code is triggering the stuff. of course, you could try posting some code ... [grin] i understand that it may not be possible to post the whole script - but if you can, please do so. perhaps to Gist.GitHub?
– Lee_Dailey
Nov 22 '18 at 5:08
1
this line$asset.PartNumber -eq $found.PartNumber
looks like it is part of the problem. your comment makes it seem that you intended the-eq
to be=
. [grin]
– Lee_Dailey
Nov 22 '18 at 6:32
Ahhh that's it! That explains some other issues with the script as well.
– Will Maclean
Nov 22 '18 at 21:39
kool! glad to know you got it fixed ... [grin]
– Lee_Dailey
Nov 23 '18 at 16:48
add a comment |
please post the output so we can make a wild guess as to what line of your still-secret code is triggering the stuff. of course, you could try posting some code ... [grin] i understand that it may not be possible to post the whole script - but if you can, please do so. perhaps to Gist.GitHub?
– Lee_Dailey
Nov 22 '18 at 5:08
1
this line$asset.PartNumber -eq $found.PartNumber
looks like it is part of the problem. your comment makes it seem that you intended the-eq
to be=
. [grin]
– Lee_Dailey
Nov 22 '18 at 6:32
Ahhh that's it! That explains some other issues with the script as well.
– Will Maclean
Nov 22 '18 at 21:39
kool! glad to know you got it fixed ... [grin]
– Lee_Dailey
Nov 23 '18 at 16:48
please post the output so we can make a wild guess as to what line of your still-secret code is triggering the stuff. of course, you could try posting some code ... [grin] i understand that it may not be possible to post the whole script - but if you can, please do so. perhaps to Gist.GitHub?
– Lee_Dailey
Nov 22 '18 at 5:08
please post the output so we can make a wild guess as to what line of your still-secret code is triggering the stuff. of course, you could try posting some code ... [grin] i understand that it may not be possible to post the whole script - but if you can, please do so. perhaps to Gist.GitHub?
– Lee_Dailey
Nov 22 '18 at 5:08
1
1
this line
$asset.PartNumber -eq $found.PartNumber
looks like it is part of the problem. your comment makes it seem that you intended the -eq
to be =
. [grin]– Lee_Dailey
Nov 22 '18 at 6:32
this line
$asset.PartNumber -eq $found.PartNumber
looks like it is part of the problem. your comment makes it seem that you intended the -eq
to be =
. [grin]– Lee_Dailey
Nov 22 '18 at 6:32
Ahhh that's it! That explains some other issues with the script as well.
– Will Maclean
Nov 22 '18 at 21:39
Ahhh that's it! That explains some other issues with the script as well.
– Will Maclean
Nov 22 '18 at 21:39
kool! glad to know you got it fixed ... [grin]
– Lee_Dailey
Nov 23 '18 at 16:48
kool! glad to know you got it fixed ... [grin]
– Lee_Dailey
Nov 23 '18 at 16:48
add a comment |
2 Answers
2
active
oldest
votes
Unfortunately,
Set-PSBreakpoint -Command
works well with explicit cmdlet calls,
- E.g., calls to
Write-Output
andWrite-Host
in script./myscript.ps1
would cause breaking into the debugger with a priorSet-PSBreakpoint -Command Write-* ./myscript.ps1
call),
- E.g., calls to
but does not work with implicit output, from statements whose output is neither captured nor redirected (e.g.,
'foo'
,1 + 2
,Get-Date
).
In the specific case at hand, statements such as $asset.PartNumber -eq $found.PartNumber
caused the unwanted output, due to confusing the -eq
operator (comparison) with the =
operator (assignment), as diagnosed by Lee_Daily. -eq
produces output (the Boolean result of a comparison), whereas =
does not.
Workarounds:
Run
Set-PSDebug -Trace 1
before calling your script, which prints each source-code line before the output it produces, if any.-Trace 2
provides additional details.
Use the following technique, which tells you the number of the first line that produces success output, whether implicitly or explicitly; note, however that script execution is aborted at that point:
try { ./myscript.ps1 | Write-Error -EA Stop } catch { "$_"; $_.ScriptStackTrace }
- The script's success output is piped to
Write-Error
, which redirects (a stringified version of) the output to PowerShell's error stream, with-EA Stop
(short for-ErrorAction Stop
) causing execution to abort on output being sent to the error stream; Thecatch
block then outputs the stringified version of the resulting error record (which in itself is the stringified version of the original output), followed by a script-invocation stack trace, whose first line reveals the number of the line that produced the output. - Note: This technique won't work if the script happens to produce statement-terminating errors before the first success output, which, however, is rare.
- The script's success output is piped to
If you want to examine the script's runtime state on a given line, say
15
:
Set-PSBreakpoint -Script ./myscript.ps1 -Line 15
Alternatively, in PSv5+, if modifying the script (temporarily) is an option, place a
Wait-Debugger
call in your script at the location where you'd like to break into the debugger.
Use the debugging capabilities of Visual Studio Code with the PowerShell extension to set breakpoints and/or step through the execution of your script statement by statement.
- Alternatively, use
Set-PSDebug -Step
for the equivalent operation directly in a PowerShell window.
- Alternatively, use
add a comment |
Yes , try this. This should break whereever a write statement is first found.
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
This command sets a breakpoint on every command in the Sample.ps1 script that begins with write, such as Write-Host. For more
Refer docs
1
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
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%2f53423718%2ftracing-where-output-is-coming-from-in-a-powershell-script%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Unfortunately,
Set-PSBreakpoint -Command
works well with explicit cmdlet calls,
- E.g., calls to
Write-Output
andWrite-Host
in script./myscript.ps1
would cause breaking into the debugger with a priorSet-PSBreakpoint -Command Write-* ./myscript.ps1
call),
- E.g., calls to
but does not work with implicit output, from statements whose output is neither captured nor redirected (e.g.,
'foo'
,1 + 2
,Get-Date
).
In the specific case at hand, statements such as $asset.PartNumber -eq $found.PartNumber
caused the unwanted output, due to confusing the -eq
operator (comparison) with the =
operator (assignment), as diagnosed by Lee_Daily. -eq
produces output (the Boolean result of a comparison), whereas =
does not.
Workarounds:
Run
Set-PSDebug -Trace 1
before calling your script, which prints each source-code line before the output it produces, if any.-Trace 2
provides additional details.
Use the following technique, which tells you the number of the first line that produces success output, whether implicitly or explicitly; note, however that script execution is aborted at that point:
try { ./myscript.ps1 | Write-Error -EA Stop } catch { "$_"; $_.ScriptStackTrace }
- The script's success output is piped to
Write-Error
, which redirects (a stringified version of) the output to PowerShell's error stream, with-EA Stop
(short for-ErrorAction Stop
) causing execution to abort on output being sent to the error stream; Thecatch
block then outputs the stringified version of the resulting error record (which in itself is the stringified version of the original output), followed by a script-invocation stack trace, whose first line reveals the number of the line that produced the output. - Note: This technique won't work if the script happens to produce statement-terminating errors before the first success output, which, however, is rare.
- The script's success output is piped to
If you want to examine the script's runtime state on a given line, say
15
:
Set-PSBreakpoint -Script ./myscript.ps1 -Line 15
Alternatively, in PSv5+, if modifying the script (temporarily) is an option, place a
Wait-Debugger
call in your script at the location where you'd like to break into the debugger.
Use the debugging capabilities of Visual Studio Code with the PowerShell extension to set breakpoints and/or step through the execution of your script statement by statement.
- Alternatively, use
Set-PSDebug -Step
for the equivalent operation directly in a PowerShell window.
- Alternatively, use
add a comment |
Unfortunately,
Set-PSBreakpoint -Command
works well with explicit cmdlet calls,
- E.g., calls to
Write-Output
andWrite-Host
in script./myscript.ps1
would cause breaking into the debugger with a priorSet-PSBreakpoint -Command Write-* ./myscript.ps1
call),
- E.g., calls to
but does not work with implicit output, from statements whose output is neither captured nor redirected (e.g.,
'foo'
,1 + 2
,Get-Date
).
In the specific case at hand, statements such as $asset.PartNumber -eq $found.PartNumber
caused the unwanted output, due to confusing the -eq
operator (comparison) with the =
operator (assignment), as diagnosed by Lee_Daily. -eq
produces output (the Boolean result of a comparison), whereas =
does not.
Workarounds:
Run
Set-PSDebug -Trace 1
before calling your script, which prints each source-code line before the output it produces, if any.-Trace 2
provides additional details.
Use the following technique, which tells you the number of the first line that produces success output, whether implicitly or explicitly; note, however that script execution is aborted at that point:
try { ./myscript.ps1 | Write-Error -EA Stop } catch { "$_"; $_.ScriptStackTrace }
- The script's success output is piped to
Write-Error
, which redirects (a stringified version of) the output to PowerShell's error stream, with-EA Stop
(short for-ErrorAction Stop
) causing execution to abort on output being sent to the error stream; Thecatch
block then outputs the stringified version of the resulting error record (which in itself is the stringified version of the original output), followed by a script-invocation stack trace, whose first line reveals the number of the line that produced the output. - Note: This technique won't work if the script happens to produce statement-terminating errors before the first success output, which, however, is rare.
- The script's success output is piped to
If you want to examine the script's runtime state on a given line, say
15
:
Set-PSBreakpoint -Script ./myscript.ps1 -Line 15
Alternatively, in PSv5+, if modifying the script (temporarily) is an option, place a
Wait-Debugger
call in your script at the location where you'd like to break into the debugger.
Use the debugging capabilities of Visual Studio Code with the PowerShell extension to set breakpoints and/or step through the execution of your script statement by statement.
- Alternatively, use
Set-PSDebug -Step
for the equivalent operation directly in a PowerShell window.
- Alternatively, use
add a comment |
Unfortunately,
Set-PSBreakpoint -Command
works well with explicit cmdlet calls,
- E.g., calls to
Write-Output
andWrite-Host
in script./myscript.ps1
would cause breaking into the debugger with a priorSet-PSBreakpoint -Command Write-* ./myscript.ps1
call),
- E.g., calls to
but does not work with implicit output, from statements whose output is neither captured nor redirected (e.g.,
'foo'
,1 + 2
,Get-Date
).
In the specific case at hand, statements such as $asset.PartNumber -eq $found.PartNumber
caused the unwanted output, due to confusing the -eq
operator (comparison) with the =
operator (assignment), as diagnosed by Lee_Daily. -eq
produces output (the Boolean result of a comparison), whereas =
does not.
Workarounds:
Run
Set-PSDebug -Trace 1
before calling your script, which prints each source-code line before the output it produces, if any.-Trace 2
provides additional details.
Use the following technique, which tells you the number of the first line that produces success output, whether implicitly or explicitly; note, however that script execution is aborted at that point:
try { ./myscript.ps1 | Write-Error -EA Stop } catch { "$_"; $_.ScriptStackTrace }
- The script's success output is piped to
Write-Error
, which redirects (a stringified version of) the output to PowerShell's error stream, with-EA Stop
(short for-ErrorAction Stop
) causing execution to abort on output being sent to the error stream; Thecatch
block then outputs the stringified version of the resulting error record (which in itself is the stringified version of the original output), followed by a script-invocation stack trace, whose first line reveals the number of the line that produced the output. - Note: This technique won't work if the script happens to produce statement-terminating errors before the first success output, which, however, is rare.
- The script's success output is piped to
If you want to examine the script's runtime state on a given line, say
15
:
Set-PSBreakpoint -Script ./myscript.ps1 -Line 15
Alternatively, in PSv5+, if modifying the script (temporarily) is an option, place a
Wait-Debugger
call in your script at the location where you'd like to break into the debugger.
Use the debugging capabilities of Visual Studio Code with the PowerShell extension to set breakpoints and/or step through the execution of your script statement by statement.
- Alternatively, use
Set-PSDebug -Step
for the equivalent operation directly in a PowerShell window.
- Alternatively, use
Unfortunately,
Set-PSBreakpoint -Command
works well with explicit cmdlet calls,
- E.g., calls to
Write-Output
andWrite-Host
in script./myscript.ps1
would cause breaking into the debugger with a priorSet-PSBreakpoint -Command Write-* ./myscript.ps1
call),
- E.g., calls to
but does not work with implicit output, from statements whose output is neither captured nor redirected (e.g.,
'foo'
,1 + 2
,Get-Date
).
In the specific case at hand, statements such as $asset.PartNumber -eq $found.PartNumber
caused the unwanted output, due to confusing the -eq
operator (comparison) with the =
operator (assignment), as diagnosed by Lee_Daily. -eq
produces output (the Boolean result of a comparison), whereas =
does not.
Workarounds:
Run
Set-PSDebug -Trace 1
before calling your script, which prints each source-code line before the output it produces, if any.-Trace 2
provides additional details.
Use the following technique, which tells you the number of the first line that produces success output, whether implicitly or explicitly; note, however that script execution is aborted at that point:
try { ./myscript.ps1 | Write-Error -EA Stop } catch { "$_"; $_.ScriptStackTrace }
- The script's success output is piped to
Write-Error
, which redirects (a stringified version of) the output to PowerShell's error stream, with-EA Stop
(short for-ErrorAction Stop
) causing execution to abort on output being sent to the error stream; Thecatch
block then outputs the stringified version of the resulting error record (which in itself is the stringified version of the original output), followed by a script-invocation stack trace, whose first line reveals the number of the line that produced the output. - Note: This technique won't work if the script happens to produce statement-terminating errors before the first success output, which, however, is rare.
- The script's success output is piped to
If you want to examine the script's runtime state on a given line, say
15
:
Set-PSBreakpoint -Script ./myscript.ps1 -Line 15
Alternatively, in PSv5+, if modifying the script (temporarily) is an option, place a
Wait-Debugger
call in your script at the location where you'd like to break into the debugger.
Use the debugging capabilities of Visual Studio Code with the PowerShell extension to set breakpoints and/or step through the execution of your script statement by statement.
- Alternatively, use
Set-PSDebug -Step
for the equivalent operation directly in a PowerShell window.
- Alternatively, use
edited Nov 25 '18 at 23:18
answered Nov 23 '18 at 20:33
mklement0mklement0
128k20241270
128k20241270
add a comment |
add a comment |
Yes , try this. This should break whereever a write statement is first found.
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
This command sets a breakpoint on every command in the Sample.ps1 script that begins with write, such as Write-Host. For more
Refer docs
1
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
add a comment |
Yes , try this. This should break whereever a write statement is first found.
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
This command sets a breakpoint on every command in the Sample.ps1 script that begins with write, such as Write-Host. For more
Refer docs
1
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
add a comment |
Yes , try this. This should break whereever a write statement is first found.
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
This command sets a breakpoint on every command in the Sample.ps1 script that begins with write, such as Write-Host. For more
Refer docs
Yes , try this. This should break whereever a write statement is first found.
Set-PSBreakpoint -Script Sample.ps1 -Command "write*"
This command sets a breakpoint on every command in the Sample.ps1 script that begins with write, such as Write-Host. For more
Refer docs
answered Nov 22 '18 at 4:50
HariHaranHariHaran
514212
514212
1
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
add a comment |
1
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
1
1
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
@Harihan thanks, but the output isn't coming from a "Write-*" style command - I think it's being returned from a function or operator. I'm after something which captures when output is generated, not when certain commands are called.
– Will Maclean
Nov 22 '18 at 4:59
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
Then you should post some sample code for better clarification.
– HariHaran
Nov 22 '18 at 5:00
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
I've edited the question to include some sample code
– Will Maclean
Nov 22 '18 at 5:15
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%2f53423718%2ftracing-where-output-is-coming-from-in-a-powershell-script%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
please post the output so we can make a wild guess as to what line of your still-secret code is triggering the stuff. of course, you could try posting some code ... [grin] i understand that it may not be possible to post the whole script - but if you can, please do so. perhaps to Gist.GitHub?
– Lee_Dailey
Nov 22 '18 at 5:08
1
this line
$asset.PartNumber -eq $found.PartNumber
looks like it is part of the problem. your comment makes it seem that you intended the-eq
to be=
. [grin]– Lee_Dailey
Nov 22 '18 at 6:32
Ahhh that's it! That explains some other issues with the script as well.
– Will Maclean
Nov 22 '18 at 21:39
kool! glad to know you got it fixed ... [grin]
– Lee_Dailey
Nov 23 '18 at 16:48