-AsJob parameter not wwork in PowerShell Docker
ShaiViente opened this issue · 1 comments
Prerequisites
- Write a descriptive title.
- Make sure you are able to repro it on the latest image.
- Search the existing issues.
- Verified that this is not a Known Issue
- Verified this is not an issues in the underlying windows container that should be reported to Windows Feedback Hub
Steps to reproduce
I'm trying to run the following script - which will show me the fastest way my network status (ping, TTL, DNS)
The script is attached here:
$segment = "192.168.0"
1..254 |%{Test-Connection -Count 1 -ComputerName "$segment.$_" -AsJob}
$Results=Get-Job | Receive-Job -Wait | select @{N="IP";E={$_.Address}},@{N="ping";E={[bool]$_.ResponseTimeToLive}},@{N="TTL";E={$_.ResponseTimeToLive}},@{N="DNS";E={[System.Net.Dns]::GetHostByAddress($_.Address).Hostname}}
``
Of course I will use the Test-Connection command with the quick option -AsJob
It doesn't work because this Powershell version doesn't have -AsJob as you can see in the image:
Why? Is there an option to run regular Powershell on Docker?
Instead, I ended up doing everything with Start-Job
But it comes out significantly slow. Instead within a second - within a minute
Would appreciate help!
Expected behavior
PS C:\> Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
3753 Job3753 WmiJob Running True . Test-Connection
Actual behavior
PS /> Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
Test-Connection: A parameter cannot be found that matches parameter name 'AsJob'.
Error details
PS /> Get-Error
Exception :
Type : System.Management.Automation.ParameterBindingException
Message : A parameter cannot be found that matches parameter name 'AsJob'.
ParameterName : AsJob
ErrorId : NamedParameterNotFound
Line : 1
Offset : 61
CommandInvocation :
MyCommand : Test-Connection
BoundParameters :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys :
Length : 5
Length : 10
Values :
Length : 1
LongLength : 1
Rank : 1
SyncRoot :
Length : 13
IsFixedSize : True
Count : 1
SyncRoot :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys :
Length : 5
Length : 10
Values :
Length : 1
LongLength : 1
Rank : 1
SyncRoot :
Length : 13
IsFixedSize : True
Count : 1
SyncRoot :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys :
Length : 5
Length : 10
Values :
Length : 1
LongLength : 1
Rank : 1
SyncRoot :
Length : 13
IsFixedSize : True
Count : 1
SyncRoot :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys :
Length : 5
Length : 10
Values :
Length : 1
LongLength : 1
Rank : 1
SyncRoot :
Length : 13
IsFixedSize : True
Count : 1
SyncRoot :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys :
Length : 5
Length : 10
Values :
Length : 1
LongLength : 1
Rank : 1
SyncRoot :
Length : 13
IsFixedSize : True
Count : 1
SyncRoot :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys :
Length : 5
Length : 10
Values :
Length : 1
LongLength : 1
Rank : 1
SyncRoot : …
IsFixedSize : True
Count : 1
SyncRoot :
Comparer : System.OrdinalIgnoreCaseComparer
Count : 2
Keys : …
Values : …
SyncRoot : …
ScriptLineNumber : 1
OffsetInLine : 6
HistoryId : 2
Line : $1 = Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
Statement : Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
PositionMessage : At line:1 char:6
+ $1 = Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
InvocationName : Test-Connection
PipelineLength : 1
PipelinePosition : 1
ErrorRecord :
Exception :
Type : System.Management.Automation.ParentContainsErrorRecordException
Message : A parameter cannot be found that matches parameter name 'AsJob'.
HResult : -2146233087
CategoryInfo : InvalidArgument: (:) [Test-Connection], ParentContainsErrorRecordException
FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.TestConnectionCommand
InvocationInfo :
MyCommand : Test-Connection
ScriptLineNumber : 1
OffsetInLine : 61
HistoryId : 2
Line : $1 = Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
Statement : -AsJob
PositionMessage : At line:1 char:61
+ $1 = Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
+ ~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
TargetSite :
Name : VerifyArgumentsProcessed
DeclaringType : System.Management.Automation.CmdletParameterBinderController, System.Management.Automation, Version=7.4.1.500, Culture=neutral, PublicKeyToken=31bf3856ad364e35
MemberType : Method
Module : System.Management.Automation.dll
Data : System.Collections.ListDictionaryInternal
Source : System.Management.Automation
HResult : -2146233087
StackTrace :
at System.Management.Automation.CmdletParameterBinderController.VerifyArgumentsProcessed(ParameterBindingException originalBindingException)
at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParametersNoValidation(Collection`1 arguments)
at System.Management.Automation.CmdletParameterBinderController.BindCommandLineParameters(Collection`1 arguments)
at System.Management.Automation.CommandProcessor.BindCommandLineParameters()
at System.Management.Automation.CommandProcessor.Prepare(IDictionary psDefaultParameterValues)
at System.Management.Automation.CommandProcessorBase.DoPrepare(IDictionary psDefaultParameterValues)
at System.Management.Automation.Internal.PipelineProcessor.Start(Boolean incomingStream)
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
--- End of stack trace from previous location ---
at System.Management.Automation.Internal.PipelineProcessor.SynchronousExecuteEnumerate(Object input)
at System.Management.Automation.PipelineOps.InvokePipeline(Object input, Boolean ignoreInput, CommandParameterInternal[][] pipeElements, CommandBaseAst[] pipeElementAsts, CommandRedirection[][]
commandRedirections, FunctionContext funcContext)
at System.Management.Automation.Interpreter.ActionCallInstruction`6.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
at System.Management.Automation.Interpreter.EnterTryCatchFinallyInstruction.Run(InterpretedFrame frame)
CategoryInfo : InvalidArgument: (:) [Test-Connection], ParameterBindingException
FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.TestConnectionCommand
InvocationInfo :
MyCommand : Test-Connection
ScriptLineNumber : 1
OffsetInLine : 61
HistoryId : 2
Line : $1 = Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
Statement : -AsJob
PositionMessage : At line:1 char:61
+ $1 = Test-Connection -Count 1 -ComputerName "192.168.0.128" -AsJob
+ ~~~~~~
CommandOrigin : Internal
ScriptStackTrace : at <ScriptBlock>, <No file>: line 1
Environment data
docker pull mcr.microsoft.com/powershell:latest
Visuals
No response
@ShaiViente the -AsJob
parameter you are attempting to use does not work because Test-Connection
cmdlet does not contain this parameter. To check the parameters allowed for the cmdlet, please refer to the documentation for the cmdlet here: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/test-connection?view=powershell-7.4
The Test-Connection cmdlet sends Internet Control Message Protocol (ICMP) echo request packets, or pings, to one or more remote computers and returns the echo response replies. You can use this cmdlet to determine whether a particular computer can be contacted across an IP network. You can use the parameters of Test-Connection to specify both the sending and receiving computers, to run the command as a background job, to set a time-out and number of pings, and to configure the connection and authentication. Unlike the familiar ping command, Test-Connection returns a TestConnectionCommand+PingStatus object that you can investigate in PowerShell. The Quiet parameter returns a Boolean value in a System.Boolean object for each tested connection. If multiple connections are tested, an array of Boolean values is returned.