{"componentChunkName":"component---src-templates-blog-post-js","path":"/20180723-ps-write-host-from-background-script-block","result":{"data":{"site":{"siteMetadata":{"title":"dfaiv-dev","siteUrl":"https://blog.dfaiv.dev"}},"markdownRemark":{"id":"82112752-eb70-5ec5-a242-2f7f77ae510d","excerpt":"I have a Powershell deploy script that runs multiple background tasks in parallel using a script block. The block was using  but I wasn’t getting any output…","html":"<p>I have a Powershell deploy script that runs multiple background tasks in parallel using a <a href=\"https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_script_blocks?view=powershell-7.1\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">script block</a>. The block was using <code class=\"language-text\">Write-Host</code> but I wasn’t getting any output. Turns out I needed to use <code class=\"language-text\">Receive-Job</code> to capture any output.</p>\n<div class=\"gatsby-highlight\" data-language=\"powershell\"><pre class=\"language-powershell\"><code class=\"language-powershell\"><span class=\"token comment\"># helper to log results</span>\n<span class=\"token keyword\">function</span> _handleJobResults <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">Write-Host</span> <span class=\"token string\">\"listing all jobs\"</span>\n    <span class=\"token function\">Get-Job</span>\n\n    <span class=\"token function\">Write-Host</span> <span class=\"token string\">\"resetting jobs\"</span>\n    <span class=\"token function\">Get-Job</span> <span class=\"token punctuation\">|</span> <span class=\"token function\">Remove-Job</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> _waitForJobs <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\"># should really check that jobs have finished, maybe in another post.</span>\n    <span class=\"token function\">Write-Host</span> <span class=\"token string\">\"waiting for jobs to finish\"</span>\n    <span class=\"token function\">Start-Sleep</span> <span class=\"token operator\">-</span>Seconds 2\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token variable\">$jobCount</span> = 3\n\n<span class=\"token comment\"># function block to be invoked in background job.</span>\n<span class=\"token variable\">$_deployBlock01</span> = <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">param</span><span class=\"token punctuation\">(</span><span class=\"token variable\">$_i</span><span class=\"token punctuation\">)</span>\n    <span class=\"token function\">Write-Host</span> <span class=\"token string\">\"script block output: <span class=\"token variable\">$_i</span>\"</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\"># invoke background jobs</span>\n<span class=\"token comment\"># no Write-Host output from $_deployBlock01</span>\n<span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token variable\">$i</span> in 1<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token variable\">$jobCount</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">Start-Job</span> <span class=\"token operator\">-</span>ScriptBlock <span class=\"token variable\">$_deployBlock01</span> <span class=\"token operator\">-</span>Name <span class=\"token string\">\"test-job-<span class=\"token variable\">$i</span>\"</span> <span class=\"token operator\">-</span>ArgumentList <span class=\"token variable\">$i</span>\n<span class=\"token punctuation\">}</span>\n\n_waitForJobs\n_handleJobResults\n<span class=\"token function\">Write-Host</span> <span class=\"token string\">\"no output from script block should have been logged.\"</span>\n\n<span class=\"token function\">Write-Host</span> <span class=\"token string\">\"re-run jobs, capture output\"</span>\n<span class=\"token comment\"># invoke background jobs, capture outputs</span>\n<span class=\"token keyword\">foreach</span> <span class=\"token punctuation\">(</span><span class=\"token variable\">$i</span> in 1<span class=\"token punctuation\">.</span><span class=\"token punctuation\">.</span><span class=\"token variable\">$jobCount</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">Start-Job</span> <span class=\"token operator\">-</span>ScriptBlock <span class=\"token variable\">$_deployBlock01</span> <span class=\"token operator\">-</span>Name <span class=\"token string\">\"test-job-<span class=\"token variable\">$i</span>\"</span> <span class=\"token operator\">-</span>ArgumentList <span class=\"token variable\">$i</span>\n<span class=\"token punctuation\">}</span>\n\n_waitForJobs\n\n<span class=\"token function\">Write-Host</span> <span class=\"token string\">\"Get Job output\"</span>\n<span class=\"token comment\">#Recieve-Job will get the Write-Host output.</span>\n<span class=\"token function\">Get-Job</span> <span class=\"token punctuation\">|</span> <span class=\"token function\">Receive-Job</span>\n\n_handleJobResults</code></pre></div>","frontmatter":{"title":"Powershell - Write-Host from Background Script Block","date":"July 23, 2018","description":"","slug":"/20180723-ps-write-host-from-background-script-block"}},"previous":{"frontmatter":{"title":"git - Rewrite authors","slug":"20180317-git--rewrite-author"}},"next":{"frontmatter":{"title":"Angular - Can You Use an Async Variable in a Pipe?","slug":"/20201120-ng-async-var-in-a-pipe"}}},"pageContext":{"id":"82112752-eb70-5ec5-a242-2f7f77ae510d","previousPostId":"4600aa31-af6a-561f-890c-94ad8d5892b6","nextPostId":"b6aa9cb7-7afa-53a8-b6af-f59897fec00a"}},"staticQueryHashes":["2841359383","3825813668"]}