You want to run multiple ps1 scripts in parallel with workflow and ForEach-parallel.Each ps1 script returns $True or $Flase as a return value.I'm trying to count $Flase, but the scope is unable to use the variables in the script.
I would like to count the errors as below, but I cannot.Do you have any good ideas?
workflow func1{
$Errors = 0
ForEach-parallel ($i in 1..30) {
US>InlineScript {
$ret=c:\scripts\test2.ps1
if(!$ret)
{
$Errors+=1
}
write-host$Errors
}
}
}
func1
If you look at the page below, it says "there is no $global scope".
https://devblogs.microsoft.com/scripting/powershell-workflows-restrictions/
Here Variables in an InlineScript Activity explains how to use it.
In order to access the workflow
variable from the InlineScript
, you must add $Using:
only once.
Also, in order to reflect the changed value in InlineScript
in the workflow
variable, it seems to be notified and substituted as a return value in InlineScript
.
Incidentally, to access the workflow
variable from the Parallel
sequence, you may need to add $Workflow:
, so you may need to combine both or something else.
Variables in Parallel and Sequence Statements
Recommendation for Windows Workflow Foundation 4.0 (WF) on PowerShell in the Variable Specification in Workflow Syntax section, but it doesn't seem to explain Donpisha.
Rather than counting up or displaying in InlineScript
, it would be better to set the return value of each ps1 to the return value of InlineScript
and process it in the ForEach loop.
Also, according to the Japanese article above, Write-Host
cannot be used in workflow, but I wonder if it can be used to increase the number of versions.It says to use Write-Output
, Write-Warning
, and Write-Verbose
.
Other references with slightly different properties Q&A
Foreach-parallel object
I tried to replace the script with Get-Random and finally output the variable only the results.
Windows 10, PowerShell 5.1 console screen worked.
workflow func1{
$Errors = 0
ForEach-parallel ($i in 1..30) {
$ret = InlineScript {Get-Random-Minimum1-Maximum20}
$retnum = [int]$ret
if ($retnum-gt10)
{
$Workflow: Errors + = 1
}
}
InlineScript {Write-Host$Using: Errors}
}
613 GDB gets version error when attempting to debug with the Presense SDK (IDE)
584 PHP ssh2_scp_send fails to send files as intended
922 When building Fast API+Uvicorn environment with PyInstaller, console=False results in an error
623 Uncaught (inpromise) Error on Electron: An object could not be cloned
© 2024 OneMinuteCode. All rights reserved.